Added GearmannExecuteWorkEvent

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.