Using ActiveSupport::Concerns with agents

I think this is a step towards what's discussed in #76