Fix a problem with camelCase key and default value and with partially overwritten defaults

The default value to `get()` was never passed on after parsing the key from camelCase.

The latest commit fixes an issue with my fix to issue #15. I'm not completely happy with having almost the same recursive logic in two places (`set()` and `setDefaults()`), but couldn't figure out a better way of doing it.

In the process of fixing the latter issue I stumbled on some duplicated logic which I extracted into a module of its own.