Allow version and held states of a package to specified as separate properties

Before this patch version and held states needed to be specified as part
of the ensure property on a package:

    package { foo:
      ensure => 'held',
    }

    package { foo:
      ensure => '1.0',
    }

After this patch those states can be specified as separate properties:

    package { foo:
      ensure => installed,
      version => '1.0',
      held => true,
    }
I was following Gary Larizza's [pattern](http://garylarizza.com/blog/2013/12/15/seriously-what-is-this-provider-doing/) of building up the _should_ changes in the @property_flush and then realizing those in the flush method and on success populating the _is_ values of the @property_hash