(Collections) Initial collections work

Initial collections work.

TODO:

* Take care of some TODO's in the code
* Self-review
* Activity
* Searching collections (search permission integration is complete though)
Not exactly sure what case you think this might be broken, but the `memberships` array already accounts for the `startIndex` as it slices it from `indirectMemberships` with the offset if appropriate.

B