Query Hashability

This changeset adds functionality to make `Query` objects hashable, so they may be used like `dict[query]` and the like.

- [x] `Filter` hashability
- [x] `Options` hashability
- [x] `Sort` heritability
- [x] Top-level `Query` hashability to tie it all together