reorganized agents module to agents package
1. Added observers cache to base_agent - trade speed for ability to add observers at runtime
2. Behavior group items became descriptors - not completely confident of implementation robustness
3. Added two pre-configured Student subclasses (one "rational", one "random").
4. Added utility tools to tests. The first and only one for now is a function to iterate a generator specified number of times or until exchausted
5. Various small fixes and improvaments