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,
    }
If a method delegates to the parent class implementation it can be omitted; this will happen by default.