v3: Uncaught Exception Handling

Allows users to add `robot.on 'error', (err) -> something()` to a script and maybe report uncaught exceptions somewhere. These are **uncaught** exceptions, this won't report any errors that have been handled internally.