The worker emits many more events to make processing jobs a little nicer.

Well, as scientifically measured, about a million times nicer.

Here is a list of events emitted and some notes on what they mean. This
will turn into documentation eventually:

error: payload is error; cannot be recovered from
close: worker got a close event from its client; no payload

warning: payload is object with error information; execution continues
info: the equivalent of info-level logging; payload is object with
action info

started: worker has started processing jobs; no payload
stopped: worker has stopped processing jobs; no payload

job.reserved: payload is jobid
job.handled: payload is object with job info
job.deleted: payload is jobid
job.destroyed: payload is jobid
job.buried: payload is jobid

Rewrote the tests to use the events, which should make them less
timing-dependent. I might still not be allowing enough slop for the
slowness of TravisCI.