(PUP-1369) Package options property / vash

I've split PR #2130 into several parts. This is one of them.

This PR adds a "Vash" container to puppet utilities. Vash is an acronym
for 'Validating Hash'. It's a mixin which turns the receiving class into
special hash that validate and munge keys and values as they enter the
hash.

Vash was originally developed as a separate module
[ptomulik-vash](https://github.com/ptomulik/puppet-vash), and you can find
modules' documentation there.

The specs for Vash are disabled by default, because it generates too
much of use cases (on ruby 1.8 travis fails to load all the test cases,
that is these plus puppets' 19.000+ test cases). If youre going to run
specs on another VM, you may re-enable vash specs as follows

        PUPPET_TEST_VASH=1 bundle exec rake spec

or
        PUPPET_TEST_ALL=1 bundle exec rake spec
(PUP-1369) Package options property / portsutil

I've decided to split PR #2130 into smaller parts. This is one of them.

This PR implements 'portsutil' utility mixins and classes to help
searching FreeBSD ports and packages. It also provides method to
manipulate port/package options (build options).

This code was originally developed as a separate puppet module
[ptomulik-packagex_portsxutil](https://github.com/ptomulik/puppet-packagex_portsxutil)
and you may find its documentation there.

The 'portsutil' functions are used by the new ports provider present in
PR #2130.
(#23084) Package options property for package

This changeset adds the package_options property to "package" type. It's
intended to be used mainly with FreeBSD ports to control port options on
installed packages (the options normally set with make config).

The sole implementation of port_options is delegated to providers. This
changesed only introduces port_options feature and property to package
type (this initially defines an interface between package type and
provider used to handle package_options).
renamed package_options to build_options
renamed build_options to package_settings
(#23374) Reimplemented ports package provider

What's inside:

  - package resource extended with build_options,
  - install_options and uninstall_options implemented for freebsd ports,
  - port options implemented (this corresponds to make config stage),
  - portversion (instead of pkg_info) used to list installed packages,
  - portorigins used to internally identify freebsd ports/packages,
  - fixed several issues, that the old ports provider suffered from

It should also be quite easy to adapt it to be compatible with pkgng.
fixed specs
handle also packages which have no port or origin at the moment
excluded specs imported from ptomulik-vash project

About 3000 specs are currently excluded, because their number was
killing for travis-ci.org. To load/run these test currently one has to
set one of the following environment variables:

- PUPPET_TEST_VASH, or
- PUPPET_TEST_ALL

for example:

        PUPPET_TEST_VASH=1 bundle exec rspec spec/unit/util/vash
fixed prefetch() to pickup unique ports
added support for pkgng
Fixed ::instances method such that it accepts names

See https://github.com/ptomulik/puppet-packagex/pull/1
Merge branch 'feature/package_options' into ports_provider

Conflicts:
	lib/puppet/type/package.rb
Merge branch 'feature/portsutil' into ports_provider

Conflicts:
	lib/puppet/util/package/ports.rb
	lib/puppet/util/package/ports/functions.rb
	lib/puppet/util/package/ports/options.rb
	lib/puppet/util/package/ports/pkg_record.rb
	lib/puppet/util/package/ports/port_record.rb
	lib/puppet/util/package/ports/port_search.rb
	lib/puppet/util/package/ports/record.rb
	spec/unit/util/package/ports/options_spec.rb
Merge branch 'feature/vash' into ports_provider