Attempt to prevent errors when coding when handing around Jobs.

These Jobs may be clones where .equals() == false, but have the same ID.

This PR changes several functions to require only a job ID rather than the job itself to try and prevent future problems. Only having an ID available means that the user cannot do things like myCollection.remove(myobject) which uses `Object.equals()` or `Object.hashCode` which will fail if the job that you've currently got is a modified copy of the original in the collection.