Greatly improve filesystem structure.

This allows us to have much more modularity, and prepares us for being
packaged.
Merge branch 'restructure'