Added an AbstractAgent

We need to be able to customise the Agents too, in order to allow them to respond to WORK_AVAILABLE messages in their own way, e.g. throttling.