Replaced ___init() with constructor

___init() had the role of the constructor, since it had to be
explicitly called from the constructor. It is better to use inheritance
so that the constructor is always called unless the implementing
adapter explicitly says not to (by providing an empty constructor
itself)
Replaced function-checks with abstract functions

Instead of checking that a function exists, inheritance allows for
defining abstract functions that must be implemented by higher classes.
This will guarantee the existence of the functions, as PHP will refuse
to instantiate without them.
Merge pull request #1 from yorn/inheritance

Refactored classes to better utilise inheritance