Edited the grammar to include some Java interop.

Also, division. Apparently / is a valid symbol, but you can't have //!
Updated when_test to be more correct.

Some of the tests were written expecting wrong behavior, so I corrected
those. Also, they were comparing on the strings of the trees, not the
trees itself (turning the tree into a string loses data) so changed them
to compare on the trees.
Updated when.

It passes the tests - for the first time in a long time all the tests I
have pass. That's pretty nice.

The implementation itself features a rather, uh, strange usage of mapcat,
but that was the only way I could think of to split one node into many
nodes. I'm pretty sure that's more a failure of my imagination than
anything else, and that there's totally a way to do it more idiomatically
which I've missed horribly.

On the other hand it works!
Refitting tests for a change to suggestions.

Going to make suggestions into a list of maps, instead of a list of
strings. Prepping the tests.
Changed threading suggestions to spit out maps.

They don't have anything but {:code STRING} but hey.

Also there's some code shared there between thread_first and thread_last,
so that could be pulled into a single file.