Refactor

I had quite a few hours spare after getting the static analysis and testing frameworks up to scratch, so I've cleaned up the code base (or, at least, tutorlib) quite substantially.

Because of the substantial changes, I'm not going to auto-merge this one as I usually do until @pjritee has had a chance to look over it.

Most of the meaningful commits have long, descriptive messages, so I'd encourage you to read those if you're interested.  However, here's a quick overview of the changes:
* `tutorlib` is no longer a flat package; it now has various submodules:
  * `.analysis` - static analysis code
  * `.config` - code for managing the configuration files
  * `.gui`
    * `.app` - the main application window (excluding the editor)
    * `.dialogs` - all the pesky dialog boxes
    * `.editor` - the `EditorWindow` subclass (ie, where the students type their code)
  * `.interface` - supporting code (much of which was originally in `TutorialInterface`), along with wrappers around various other modules (such as testing and the web API)
  * `.testing` - the testing framework (including all `unittest` subclasses that we need)
* the vast majority of the code has been edited to be PEP8 compliant
  * filenames are now lowercase with underscores
  * variable and function names now comply with_pep8 (even though I'm not a huge fan personally, I felt that it was better to be consistent)
* some classes have been refactored to draw out common functionality (eg the dialogs)
* some classes have been almost entirely rewritten so that they're a lot easier to follow (notably a rewrite of `TutorialApp` and the removal of `TutorialInterface`)

At the time of writing, the refactor isn't complete, but I wanted to throw this up here anyway.  Remaining changes include:
* adding some minor missing functionality, such as font support and menu hotkeys
* cleaning up some classes which didn't get done the first time (notably everything in `gui.editor`, including the menus, which are non-compliant atm)
* all the web code needs to be rewritten/updated (I haven't got around to this yet, as I wanted to wait until I started on the synchronisation framework); this shouldn't be too difficult, as @jgat has already done the hard work
* refactoring `online.py` (which I didn't want to touch until @jgat was done with it, and which doesn't need a great deal anyway)
* some support scripts need to be updated
* various small things marked with TODOs in the code itself

The branch should be stable for testing, and is compatible with the same tutorial format as master.