Added GearmanExecuteWorkEvent

This event will be executed on each iteration of work by GearmanExecute.
The event includes the following information:

- The configurations for each job when ::runJob is called.
- Same for the remaining iterations, this decreases with the iterations on each event.
- The return code of the last work.

Changes:
* added GearmanExecuteWorkEvent class
* added ::setEventDispatcher to GearmanExecute
* added DI call on GearmanExecute to populate event dispatcher
* added gearman.execute.work constant to GearmanEvents
* dispatched gearman.execute.work from GearmanExecute

Tested locally without issue.
Hopefully BC is maintained, aside from the dependency on EventDispatcherInterface, this feature
can be made optional by checking if the dispatcher is null before attempting to call,
looking for second opinion.
There were originally four methods, the fourth was ::stopWorking.

Simpler to ::preventDefault in javascript, it was going to allow a listener to stop continuation of work for that runtime of the worker, but I removed it before committing.