refactor: delegate values() to _sorted_records()
Eliminate code duplication by having TableMixin.values() call
_sorted_records() instead of reimplementing the same list
comprehension logic.
feat: add equality and hash methods for Table and Transaction
Implement __eq__ and __hash__ for both Table and Transaction classes:
- Table: value-based equality comparing resolved path, key_specifier,
and record state. Auto-reloads both tables before comparison.
- Transaction: equality based on parent table identity (is), finalized
status, and snapshot state.
- Both classes raise TypeError on hash (mutable objects).
Includes comprehensive tests and documentation updates.
feat: add dictionary-like access to Table and Transaction
Add support for dictionary operations on tables and transactions:
- `table[key]`, `table[key] = record`, `del table[key]`
- `pop()`, `popitem()`, `setdefault()`, `update()`
Consolidate ReadableMixin into TableMixin which provides the full
interface for both Table and Transaction classes. Register TableMixin
as a virtual MutableMapping subclass to maintain JSONLT's sorted
iteration semantics while passing isinstance checks.