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. This cuts
down on mis-scheduling of jobs since Agents are no
longer dealing with a racy view of their state when
bidding on Jobs.
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.
Merge pull request #393 from bcwaldon/agent-locking

Address AgentState raciness
refactor(event): Drop EventListener construct