Reworked much of LFG code + skeleton for solution

After many thought-iterations on how to implement LFG's Solution Algorithm in a
way that would interact easily with the rest of the code, I finally convinced
myself that it could be done with complete immutability in a way that is worth
it. Before getting into the nitty-gritty details of how partial solutions would
be constructed, I set up the framework for the final part of the solution
algorithm.

Parts 1 and 2 are done: annotate the AST with functional equations, and then
generate the F-Description. The problem is unifying the F-Description into all
minimal satisfying F-Structures. I have the basic guidelines down: First,
build partial solutions by going through all of the defining equations. Then,
begin branching by breaking apart the disjunctions (conjunctions are done here
too, for convenience, but if the speed boost is needed they could be processed
first. Not that it'd make much of a difference) and finally all of the
constraints are tested. What is *not* implemented is the actual structure of a
partial solution (well, okay, something is there, but it will likely change) and
the functions to resolve defining equations and verify constraints.

At least, the problem of part 3 of the solution algorithm is much easier to
grasp now that I have the surrounding code. It only remains to implement:
  - the data type PartialSolution
  - the function addDefine
  - the function verifyConstraint
  - the function makeFStructure
all in the new file Solution.scala.

Also, I realized that the AST-annotating code must remain in
LexicalFunctionalGrammar. That is where it belongs, as it uses all of the
private data of the grammar.