* Update runs have been refactored into self-contained structures.
* Running pre-commands, handlers and post-commands has been
implemented. While errors during pre-commands will stop updates for
the files they correspond to, a handler failures will interrupt *all*
updates for files that use that handler.