fix(agent): Lock AgentState in event handlers

Access to the AgentState object by the Agent event
handlers must be done in a transaction. Locking from
the event handlers themselves gets us this.
fix(agent): Allow agents to bid on conflicting jobs

Agents may receive messages out of order, which can cause
an Agent to bid for a Job after it has already been scheduled.
If the job that was bid upon has conflicts, it can prevent
an Agent from placing legitimate bids in the future. Allowing
an Agent to bid knowing it could be bidding for conflicting
jobs will cause more churn during the scheduling process, but
at least it prevents Agents from sitting out of the bidding
process altogether.