fixed possible race in workStarted vs. run invocation order

If workStarted is not called before the run method is invoked, we get
a spurious IllegalStateException.  Now we simply check that the work hasn't
already been run.