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 a mask option that can be either a string, an object or an array of strings and objects.
If it's an array, the mask is merged by overwriting any already existing mask.

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: allowLevel-1` 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.

update2:
`allowLevel-1`, `allowLevel-2` .... are now valid mask values.

update3:
changed options (remove maskFile, allow mask to be a string, an object or an array)