contents.js wrapper for contents service

This is PR #6671, rebased because it's a blocker for the text editor components, and @fperez asked me to make that high priority. So far, I've just rebased, I intend to test it and fix things I see.
Actually, it looks like the server at present will let you create checkpoints for another file. But I don't think we'll use that, and it would be reasonable for another implementation to not handle it.