Start adding and testing combinators.
PEP 8.
Require pretty, and use it to improve debugging output.
core: If a Lazy has already been forced, change its repr().

Useful for seeing exactly what's been forced already.
core: Fix recursive pretty.
core: Refactor into objects.

Makes it so much easier to reason about behaviors.
core: Slightly improve laziness.

This shit just isn't working. I've gotta find something better.
core: Stuff.
core: Adjust laziness slightly.
core: Patch lazy nodes more directly.

Improves recursive performance somewhat.
core: Make things a little stricter.

Remove Delta and instead have an explicit nullability function, which also
uses Kleene's fixed point. This paradoxically improves strictness because we
can directly ask objects whether they are nullable.

Additionally, stop adding laziness to compaction. Compaction now proceeds
directly and greedily, and only terminates if recursive compaction is
detected.
basic: Add an Optional combinator.
Add more Optional tests.

I've really gotta sort out how reductions pass along data.