Pyfilesystem support+refactor

This adds file system support, and is a refactor of the XBlock codebase as per a longer discussion with Cale, etc. Specifically, 

* We add a directory to XBlocks for reference implementations of standard services, blocks, and fields. In the future, runtimes may provide their own implementations instead (if we decide to do this for fields, this will be a major backwards-compatibility breaking change). 
* We add a process for prototyping services. 
* We add a prototype service+field type which adds pyfilesystem support. We explicitly mark this as a prototype implementation. We'll build this out, and see if there are issues. If there are, we will switch to an interface along the lines of one suggested by @ormsbee 
* We restructure the code such that only some fields are JSONifable, which does not make sense for things like blobs. This will break backwards-compatibility if we decide to do this, but for now, just shows deprecation warnings. 
To me, this seems like a very strange mix of vague ("we use kwargs so we don't have to get too specific yet") and oddly specific (a type= parameter which is described in detail but never used).  You say kwargs is there for backward compatibility, but this is a brand-new decorator, and is only used once, with no arguments.  I'm having trouble understanding the goals and solutions here.