Monad Transformer Madness!

I (kind of) got the hang of monad transformers to finally cleanly implement this
part of the solution algorithm for LFG. And hoo boy, it's clean alright! Had to
revise the build to allow for higher kinds without warnings because of how I'm
using the StateT monad transformer.

Basically, the solution algorithm is best modeled as a stateful computation, and
it ALSO may branch and produce multiple results (each with their independent
states). I was wrestling with the State monad trying to figure out how to do
this cleanly until I finally realized that this is EXACTLY what monad
transformers are for! So I learned up, got a bit better acquainted with Scalaz,
and had a long fight with the compiler, but now here we are and the view is
splendid. Using a StateT parameterized with List, we also have a nice way of
dealing with failure (the empty list!) in addition to branching at disjunctions.