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.
There's one compelling reason not to.

`SequenceType` has a Self constraint: 

```
    /// The type of element generated by `self`.
    typealias Element
```

If we make `BookmarkFolder` a `SequenceType`, such that we can have it expose a generator method, then we can't use it as a concrete type (e.g., as the type of a member variable).

I discovered this the hard way, by implementing it. I'm going to dig a little, see if there's a workaround, but otherwise I'll drop this until we need it.