Redesign term contexts to be more general

This also reverts pair terms to first-class status, allowing them to
contain term arguments.
Add dividers for code organization
Simplify alist structure
Extend do-notation with pattern binding
Add term-context manipulators
Add small-step interpretation