Bug 1109772 - Refactor data access API. (WIP)

This'll be a non-trivial bunch of work. I'm still hacking away, trying to get the abstractions right. Starting with bookmarks.

Pull request here for clarity; do not merge this yet.
I think this is more swifty:

```
switch bookmark {
    case let item as BookmarkItem:
        // Open the link
    case let folder as BookmarkFolder:
        // Decent into the folder
}
```