make loading of data more flexible

by putting it into a separate method that can be overridden
in subclasses to implement different readers (or constructors
in a more generic sense)
use the new overriding mechanism
make sure "self.data" exists

in case a child class has a broken __load_data__ method that
does not set the variable