Content libraries prototype

**Background**: This is an early-stage prototype implementation of [Content Libraries](https://openedx.atlassian.net/wiki/display/SOL/Content+Libraries) ([SOL-11](https://openedx.atlassian.net/browse/SOL-11)). Once this PR is ready, it is intended to be merged so that it can be used as a common basis for further work on the feature. **It is not intended for use on production instances anytime soon**, so is disabled by default using a feature flag. Backwards-incompatible/breaking changes may be introduced in the near future.

**Discussion**: Architecture discussed extensively on [the wiki](https://openedx.atlassian.net/wiki/display/SOL/Content+Libraries) and in meetings, then the revised proposal was presented to the [Arch Council](https://openedx.atlassian.net/wiki/display/AC/Architecture+Council) on Oct. 21 and given thumbs up. [Some open questions remain](https://openedx.atlassian.net/wiki/display/SOL/10-22-2014+Architect+Council+Review+of+Content+Libraries).

**Partner information**: 3rd party-hosted open edX instance, for an edX solutions client.

**Merge deadline**: TBD

**Dependencies**: Requires edx/opaque-keys#46, which is already merged.

**Status**: Demonstrates the very basic features of libraries.

**Future**: The following will *not* be part of this PR:
* UI/UX improvements, including pagination ([code for this is ready](https://github.com/open-craft/edx-platform/pull/9), PR coming after this one merged)
* Course-specific overrides (implementing this requires careful thought and code review so I'd like to do it separately in an upcoming pull request). __Note__ that this means that at present, if you import content from a library into a course, then edit the imported blocks from the course view in studio, any such changes will be lost when synchronizing/updating with the latest content blocks from the library. ([code for this is ready](https://github.com/open-craft/edx-platform/pull/6), PR coming after this one merged)
* filtering/tagging
* Support of libraries from non-split courses
* Performance tests (can we have 1,000 problems in the library? 10,000?) - very much depends on how course overrides are implemented, so this is deferred for now
* Permissions - currently uses the same permissions system as courses. ([code for this is ready](https://github.com/open-craft/edx-platform/pull/8), PR coming after this one merged)

**Testing Instructions**:

1. Check out this branch and do `paver install_python_prereqs`
2. As 'edxapp' user, edit `~/cms.env.json` and add `"ENABLE_CONTENT_LIBRARIES": true` to the `FEATURES` object.
3. Edit `~/cms.auth.json`. Go to `MODULESTORE` > `default` > `OPTIONS` > `stores` - it should contain two or three entries. Re-order the entries so that the store with `"NAME": "split",` comes first in the `stores` list. (This makes [split](https://github.com/edx/edx-platform/wiki/Split:-the-versioning,-structure-saving-DAO) the default modulestore for any new courses.)
4. Start `paver devstack studio` and go to `localhost:8001` in your browser.
5. Log in as staff, and create a new library (a new "New library" button should appear at top right of studio home page).
6. Add some content to the library.
7. Go to studio home and go into a course or create a new course.
8. Go to Settings > Advanced Settings and add `"library_content"` to advanced_modules.
9. Go to Content > Outline. Create a new section and subsection, then edit it. Click "Advanced" and add a new "library_content" block.
10. Once the block is added, click "Edit" to edit its settings. Most are explained on the settings editor. For the "Library" setting, you must click "Add", then paste the LibraryLocator of your library. This looks like `library-v1:ProblemX+PR0B`. (It's in the URL when you go to the library in studio). Hit Save.
11. Click "Update now with latest components from the library".
12. Optional: Click "View >" to preview all the blocks found in the library.
13. Hit "Publish", then start up the LMS and go to `localhost:8000`. Browse into the course, and you should see that the block is replaced by random blocks from the library. To test the randomization, click the lowest "STAFF DEBUG INFO" link underneath the module, then click "Delete Student State", then refresh the page.