Added lots of interfaces.
Pulled up stuff from concrete implementations to super classes.
... lots more. no time atm.
Added rudimental testings.