Bug 1109772 - Refactor bookmarks data access API.

This'll be a non-trivial bunch of work. I'm still hacking away, trying to get the abstractions right. Starting with bookmarks.

Parts 1-7 already merged; parts 8-10 now ready for review.