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.
Because I needed it in order for `Bookmarks` to implement `shareItem`, and either this or this *and* `ExtensionUtils` needed to be public, because the protocol I was defining referred to that type.