type: Check if we have a source before autorequire
type: Change most params to properties.

Properties can be discovered, parameters cannot and hence don't show up
in the output of `puppet resource type`. Since we can discover these
things about a key they should be properties.

Minor touch ups to the descriptions included.
provider: Get rid of a superfluous variable.

This makes @apenney happier.
provider: Build the regexp as a regexp.

We were previously building it out as a string but @igalic pointed out
we could use /x and have the benefit of inline comments.
provider: Implement getters/setters for properties

Since most of our properties are read-only the setter is implemented as
returning a failure with a human friendly error message.