Overhaul

A huge overhaul. The AbstractDog2 is now using dependency injection, so
that unittesting is easy