Add the constraint type and check constraints before running a transaction.

Constraints allow modules to express dependencies on resources
that are managed by other parts of the manifest, most likely
other modules.

They are an alternative to the ensure_resource function from stdlib
as well as the common workaround of declaring shared resources inside
`if !defined(Ref[resource])` blocks.

The idea and initial design for constraints were originally shared by
John Bollinger on the mailing list:
https://groups.google.com/d/msg/puppet-users/Fvl0aOe4RPE/Ph38bq3FmHcJ
TEMP: describe constraints in README.md
some constraint TODOs