Better mask option

This adds a better masking system than proposed in #13.
It has no dependencies and is more flexible than the one from #13.

It allows for mask and maskFile options like #13. If both are given, they are merged together with mask overwriting maskFile.

It allows you to define a mask like this:

`key: true` includes this value including any nested objects
`key: false` don't include this
`key: allowFirstLevel` include the first level in the result, any nested objects will not end up in the result.


The config option `maskAllowUnknownOnFirstLevel` will allow you to define, what should happen with keys in the source, that are not defined in the map. Default is `false` which means, throw away any unknown key. If it is set to true, everything that is not defined in your mask, will end up in the output.

update:
I changed the meaning of the keywords a bit to make more sense and allow for more keywords for even more granular control in the future without bc breaking. For example something like 'allowLevel-1', 'allowLevel-2' and so on could be added.
unnecessary comma