(PUP-3863) Ensure correct handling when undef is hiera default value
The Puppet function hiera() was not able to diffrentiate between the
lack of a default argument and a default argument passed as undef.
Instead, it would always treat undef as "no default" and consequently
raise an error when no value was found for a given key.
This commit changes this so that the hieara function (and it's
specializations) have different dispatchers for the cases when a
default parameter is provided or not. For the case when the default
is provied it will pass a special default value down to Hiera in its
place. On return of this special default means that the original
default should be used.