Allow flat syntax and use it internally for key resolution

I wasn't a big fan of the 'nested' syntax for defining my string bundles, as I am using names like 'setup.error.passwordmismatch'. 3 nested objects seemed too much for me and the bundle was not very readable anymore...

Moreover, in each call to i18n, there was this kind of recursive get() function that looks a bit inneficient. A simple key lookup would have been faster.

Thus this PR allows a dotted syntax to be used in map() calls, and the lib now uses a 'one level' map per language, which is much more better performance wise IMO.