make Storage interface generic

* the raison d'etre of the whole exercise