Group Categories (50% done) and some refactoring

Moved a lot of add_*, remove_* methods into collection objects to
simplify the code and make it more modular.