Clean up logic around user errors / exceptions thrown on start/end

@heyday good work with this module, it's actually quite helpful! I came across a few issues using it today and have patched them accordingly (~1 commit per patch). I've also got the test suite running again, as I notice it wasn't beforehand.

Really we should be setting up travis to do this, but that's for another time :)