Important Bug Fixes and more tests

- Added a model-based property-based testing suite to find a few new
  bugs
- Fixed bad-diffing bug by improving on the remote key diffing
- Removed useless sorting of hashes before calculating child hashes.
  The order now uses the children's order (based on their byte at a
  given offset) rather than a sorted list of hash. This is backwards
  incompatible, but will work fine under a single version.
- Extended the serialization format to account for the more complete
  remote key diffing.
- added an `insert_many/2` function to allow easier building of large
  trees from generated lists
- Fixed infinite loops that could be triggered when specific children of
  a remote tree would be at offset 255 in a tree while the local one
  didn't have a similar child to compare.