(PUP-1932) Restrict systemd provider to manage file-based services

Prior to this commit, the systemd provider returned in-memory services.
This had a couple odd consequences, e.g. with 'puppet resource service':
1) short-lived services would come and go, though they are not actually
   managed directly
2) disabled and stopped services wouldn't be reported at all

This commit changes the systemd provider to return file-backed
services.
Use no-daemonize and not forking service

Making puppet fork and systemd to read PID file seems unnecessary complicated.
Adding dependency on puppetmaster to puppet

Sounds like a good idea to wait with start of puppet agent to finish starting
of puppet mater first.
Make relation between service and sysconfig file obvious

There is puppet service but it's environment file is called puppetagent
(probably due to historical reasons). Making the naming more consistent and
obvious.
(PUP-2027) Use Callable in Function API

This changes the impl of the Function API to use the Callable type
instead of using a Tuple. This is in preparation for handling
blocks since a Callable type also encodes the functions requirement
regarding a trailing block (no-block, optional, required) and its type
signature.

This also moves the functionality to check argument compatibility to
the TypeCalculator. It now has a callable?(callable, args_type) since
this is different than assignable?
(PUP-2027) Support lambdas in 4x function API

* Adds ability to accept lambdas/blocks in the 4x function API
* Adds ability to define "last arg captures rest"
* Adds CallableSignature as API for information about a callable (was
  different for functions and lambdas earlier)
* Function and Closure now implements CallableSignature
* Refactoring of how evaluator calls functions (no need to assert
function exsistnce separately (just takes time to look up functions
twice).
* TypeCalculator can now infer Callable from Function and Closure
* TypeFactory supports creating Callable with a block type last
* Callable type is given convenience methods to get range of types and
  block (accepted, optional, required).
* Spec tests added for many additional examples (for blocks)
(PUP-2176) Change to correct evaluating parser for puppet function load

The PuppetFunctionInstantiator used the future parser for 3x.
(PUP-2176) Add validation of puppet function name (must be name spaced)

This adds validation in the 4x checker to flag puppet function
names that are not namespaced.
(PUP-2176) Make loading of puppet functions not nest under modulename

Before this fix, the puppet function loader:
* accepted puppet functions in the global name space
* mapped foo.pp request to <moduleroot>/functions/foo.pp
* mapped mymodule::foo.pp to <moduleroot>/functions/mymodule/foo.pp

Now:
* searches for global names will not find puppet functions.
* mymodule::foo.pp is mapped to <moduleroot>/functions/foo.pp

(requested name vs. actual name was already checked)
Merge pull request #2507 from kylog/issue/pup-1932/systemd-reports-transient-services

(PUP-1932) Restrict systemd provider to manage file-based services
Reading even old sysconfig file

For compatibility reasons reading even the old sysconfig file although new one
overrides it. But people who have some interesting settings in the old
sysconfig file can still use them unless the are set to something else in the
new one.
Merge pull request #2510 from miska/master

Little bit of systemd unit files polishing
Merge pull request #2531 from hlindberg/pup-2176_restrict-puppet-functions-to-module-namespace

(PUP-2176) Restrict puppet functions to module namespace
(PUP-2298) add support for Type#in_valid_catalog? methods to transaction

In order to deprecate the builtin defined function (which is often abused
to work around resource duplication between modules) it is desirable to
add resource constraints to the language. An easy approach to allowing such
constraints to work is to add them as a special resource type that does not
take effect during the transaction, but fails the whole catalog in case of
validation failure.

To make this possible, add a lookup for the Type#in_valid_catalog? method
to Transaction#evaluate, in between the generation of additional resources
(which may affect the outcome of catalog consistency checks) and the start
of resource evaluation / graph traversal. Call the in_valid_catalog? method
when found, and fail the catalog if any of them return a false value.
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