We've been taking a product of strides and multiplying that by the major
dimension, but we should be just taking the largest stride and
multiplying that by the major dimension, as the largest stride
already factors in the other strides in the array shape.
Changes:
* utility functions in `hatlib` now make use of the HAT object model (OM). Previously, `tomlkit` was being using directly and was bypassing the checks and OM construction of child objects.
* `hatlib.load` now returns a `HATPackage` object that results from deserializing the HAT file passed in. Additionally, if functions can be loaded, a non-empty `AttributeDict` is returned as a second value.
* Moved test folder to be a sibling of library folder. Now the package no longer contains the tests when installed. Additionally, the library can be tested by running `python -m unittest discover test` in the root of the repository.
* Adds YAPF style config to setup.cfg and formatted all touched files with `yapf`
Also adds the helper command `hatlib.verify_hat`
```
usage: hatlib.verify_hat [-h] hat_path
Executes every available function in the hat package with randomized inputs. Meant for quick verification. Example: hatlib.verify_hat_package <hat_path>
positional arguments:
hat_path Path to the HAT file
optional arguments:
-h, --help show this help message and exit
```