(PUP-1537) Separate out hold state into a separate property

Currently holding a package and specifying a version are mutually
exclusive states on ensure:
```
  package { 'foo':
    ensure => '0.4'
  }

  -- OR --

  package { 'foo':
    ensure => held
  }
```
This is unfortunate as the typical usage for package holding is to hold
a specific version of a package to avoid OS upgrades upgrading the
package version.

This commit adds a hold property and defaults hold to true when a
package version is specified.
```
  package { 'foo':
    ensure => '0.4'
    # default
    # hold => true
  }

  -- OR --

  package { 'foo':
    ensure => '0.4',
    hold => false
  }
```
relevant bug: https://tickets.puppetlabs.com/browse/PUP-1537