Non browser support

This replaces #458 and their predecessors. I've taken the changes James made, rebased them on top of master (the grand module split), then split everything up into small commits, in hopefully a sane order. I've addressed the feedback from the #458 PR.

When reviewing, please consider checking the individual commits. That should make the reviewing a lot easier as well.

The `Export:` commit deserves special attention. I got sick of the twisted logic we had there, so I changed them to only export to properties that we actually check for. It works in the context of what we're testing.