Support default values that are subs as well as normal scalars

The attached tests / Changes diff should explain this. We can now use
default values returned by subs too, so this also works for
e.g. HashRef where you want to supply a default value.