Completely re-wrote how agents are created. Rather than create the agent
and pass it into the dialog, the dialog will create the agent and return
it to the main GUI. Replaced all of the initialize methods with
constructors. Made Agent abstract and moved as more additional common
code as possible into the base class. Cleaned up the input validations.