Added
- `ltfd` goal
Changed
- Moved finite domain goal constructors into fd.py
- Exit early from FD goals if any var has no domain
- When exiting early from FD goals, make sure a constraint is added to the store
- Use `immutables` map instead of pyrsistent map (better performance)
- Change `neq` signature from `neq((a, b), *rest_pairs)` to `neq(a, b, /, *rest)`
- Make `Constraint` frozen so it's hashable
- Store `Constraint` operands as tuples rather than lists/sets