(maint) Cleanup comment

The comment had trailing whitespace and a comma. It makes more sense
without either.
(maint) Extract language specification tools

The resource_expressions_spec contained a useful way of writing language
specification tests. This extracts those out so that they can be reused
in other places.
(PUP-3054) Ensure that inherits are absolute

PUP-121 was supposed to make all references to classes and resource
types absolute, but it looks like it missed a spot. The class referenced
in an inherits clause was not being looked up in an absolute manner,
which caused it to find the wrong parent class in certain cases. This
changes the future parser so that inherited classes are always absolute
names.
(maint) Express language tests in puppet language

This changes the tests of the puppet language, which should become part
of the language specification's example and test suite, to be entirely
expressed in the puppet language. This removes any dependency on ruby!
Well, any dependency on ruby for specifying the language tests.
(perf) Several small performance improvements

This removes some "dev mistake" error checking, which reduces the
overhead of some common calls. It also makes some calls less common,
most notably it caches the environment of a node when it wasn't
explicitly set and it falls back to using Puppet.lookup(:environments).
This can drastically reduce the number of environment lookups in some
situations. For the resource_expression_spec.rb tests, this resulted in
a 0.6 second improvement (~3 seconds to ~2.4 seconds).
(perf) Speed up setting lookup

One of the slowest thing for tests is setting values. They are reset and
changed often. This speeds up a few of the settings code paths by
removing unneeded method calls, either by introducing local variables,
or using delegators. In addition the ChainedValues objects are held on
to so that if the same environment and section is needed again it
doesn't need to be recreated.
(maint) Fix optimization that altered semantics for += production
(maint) Improve two test by checking they have no effect on catalog.

It is now possible by checking if the result of a "produce" had
no effect on the catalog by comparing against an empty array.
Merge branch 'zaphod42-issue/master/pup-3054-incorrect-lookup-in-inherits'