Issue 31 — Part 1

Quite some changes, but I think this releases #52 #39 (at least when I'm done with this one here on #31) and #75 for others to work on.
Bunch of tests to be added for #52 #39 and #75 as well... 
Wonder is the `CacheWriter` should be told this is an "insert"... I'll change (as part of the second part to issue-31 though) that to reflect it on the `CacheWriter` interface