Add YARD return type comment
Add validation of software agents

- Add validation to the Activity model to make sure that the "agent"
  field really represents a software agent.

- Add abstract method #run to SoftwareAgent to indicate that it is
  expected to be implemented.
Add abstract Job.perform

This indicates more clearly that this method is expected to be
implemented.