Allow workers to enqueue jobs with the specified queue manager

This change allows workers to enqueue jobs from inside themselves. This is useful when a worker performs its assigned task then wants another worker to continue.

I've also changed the visibility of some of the functions inside AbstractWorker, no need for them to be public.

Workers can now enqueue a job via `enqueueJob(String workerType, Map<String, String> jobParameters)`. This will wait for an acknowledgement from the Queue Manager, and will fail with an `EnqueueJobException` if no acknowledgement is received. The worker can then decide what to do with this information.