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,
    }
Mapping the type `:ensure` value to the provider `:version` value has some odd implications, why did you choose to take this route?