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, if value is an object, include only first level
`key: false` don't include this
`key: allowAll` allow everything, any nested source objects will end up in 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.