performance improvement: calculate keys upfront and cache for later

`keys()` still needs to include the current list of keys, since
additional attributes or keys might have been added lateron.
no longer fake our own attribute - we support 'proper' ones now :)
adjust to actual implementation

after running the README through py.test
fix ``__dict__`` to actually return a dict instance
provide motivation and more detailed example.

i hope this makes it clear, what this is actually *for*...