(#22129) force explicit file content to be treated as a bytestring

This replicates the implicit behavior in Ruby-1.8.7, and avoids chasing
down every location where a value is passed to `should=` and setting the
encoding there.
use :if so rspec sees the test even if it's not executed
cosmetic changes to package providers
(#21133) Report on installed windows package versions

Previously, the windows package provider knew what versions of
packages (MSI and exe) were installed, but did not report them,
e.g. when running `puppet resource package`.

This commit enables the package version to be included in the
output, e.g.

    C:\>puppet resource package Notepad++
    package { 'Notepad++':
      ensure => '6.4.5',
    }

In order for the `ensure` property to contain a version number,
the provider must be versionable, which this commit enables.

Note that the `ensure` version specified must match the
version of the package specified by the source parameter. If
it doesn't then puppet will think the package is out of sync
and needs to be updated. This is similar to what happens if
the resource name doesn't match the DisplayName value in the
registry, or differs in case.
(#8040) Add a function to specify containment

This adds the 'contain' function. When used inside of a class definition, it
will create a containment relationship such that the current class contains
the argument of 'contain'.
(#8040) Don't allow duplicate contain calls
(#22362) Changes in const_defined?() on ruby 1.9 break Puppet::Util::Classgen
Merge pull request #1871 from joshcooper/ticket/master/21133-report_windows_package_version

(#21133) Report on installed windows package versions
(maint) ignore Gemfile.local
Merge pull request #1885 from ferventcoder/stable

(maint) ignore Gemfile.local
(packaging) Update PUPPETVERSION for 3.3.0-rc3
Merge branch 'stable'

* stable:
  (packaging) Update PUPPETVERSION for 3.3.0-rc3
  (maint) ignore Gemfile.local
(#8040) Test order of application for contained classes

This also includes some minor refactoring of the contain function.
(maint) Fix output of ArithmeticExpression label (future parser)

If an ArithmeticExpression is involved in an error and a label
is output as part of the error message this led to an internal
error - undefined o_operator.

This fixes the problem (it should have been o.operator).
(#22442) Fix problem with missing issue ILLEGAL_NAME (future parser)

When a qualified name did not conform to the naming rule for
qualified names a reference was made to an undefined issue.

There was also a problem with the name validation rule as it was not
anchored at the beginning of the matched text. It thus allowed
variable names like `$Aaa` (which should also have been flagged as 
an error). Other naming validation patterns suffered from the same
problem.
(#22442) Update the name validation rule to not accept hyphens

The lexer does not allow them for the 3x standard of not allowing
hyphens in names. The validator should not use a more permissive rule.
(#22442) Add test that capitalized names are flagged as errors.

Capitalized variable names will not be allowed. The future parser
is more strict than 3x where this unfortunately was documented as
being ok.
(maint) Fix failing test.

The test was wrong (inadvertent inclusion of an unexpected error while
testing ability to catch a different problem).
(#8040) Do not create duplicate edges

If a class is contained twice in the same location, this is consistent but
should only create one edge.
(#8040) Clarify behavior in tests around multiple containment