Created AddressHandle, AttributesHandle, DatasetHandle, GroupHandle objects with their own files and tests.

Created error.py, for custom errors

These AddressHandle objects are going to be used in the refactor for version 1.0.0, but it makes sense to have a separate version where they exist and are tested but are not used in the Database object first.

These Handle objects do a lot of the Database object methods in staticmethods, and then have instancemethods that call those staticmethods.

These could in principle be used outside of the Database object if you want to perform many operations on the same dataset or group (E.g. heavy attribute modification).

The staticmethods are the least safe, most useful way to use these handle objects to call h5py.File, but the instancemethods are the most safe, least useful way. However, the least useful, most safe way, is still useful enough for me.