created hdf5 backend - seems to be working. Probably could use some
performance tweaking.
refactored hdf5 back by splitting large code into smaller functions.