Many big changes:
* Exam support in API, implementation in main code
* AJAX overhaul
* Query strings now are almost never used (POSTdata for `setid` and `domod`)
* Removal of jQuery Validator in favour of HTML5 input attributes
* Other code tidy-ups