Squashed commit of the following:

commit abf57c687e447a17e3df945899abff72a6349660
Author: Michael Marconi <mm@du.co>
Date:   Fri Oct 24 16:51:06 2014 +0100

    Test fix

commit 425f2ca29d9d503aa7937f4e6b8f73b21e331a34
Author: Michael Marconi <mm@du.co>
Date:   Fri Oct 24 16:27:19 2014 +0100

    Concurrency fixes

    We've simplified the handling of concurrency by assuming that the state in the Schedulre Actor is thread safe by default.  Problems apparently related to concurrency turned out to be passing Jobs between Scheduler and Agent by reference, instead of value.  This leads to situations where state is manipulated by the wrong actor accidentally.  To fix this, we ensure that a Job is deep cloned before being passed on to an Agent!

commit 5a842f710e3d121ab670488c7a33783a44c15f87
Author: Michael Marconi <mm@du.co>
Date:   Thu Oct 23 23:46:26 2014 +0100

    Unwound concurrency protection