(WIP- do not merge) Feature/master/pup 3069 add defaultmanifest

This provides default_manifest and restrict_environment_manifest, and halts compilation if there is a conflict in manifest settings.  It needs some integration tests and should not be merged just yet, but it is otherwise ready for review.
I think you mean something pathological like

manifest=$modulepath
modulepath=/foo/$environment # ah ha!

Yes, because original_manifest is uninterpolated, so unless the uninterpolated value of the original manifest is an exact match for the interpolated value of the default_manifest setting, a conflict is signaled (assuming the other conditions are met).

Although, looking at this again, I think we should be testing with self.manifest rather than Puppet[:default_manifest], though this doesn't change my statement above.