Eval: Use Control typeclasses to organize lookups
Eval: Use Control typeclasses to organize lookups

This change reworks our code organization in the evaluator, moving from
explicit case statements on lookups to one that leverages
applicative/alternative and monadic structuring over lookup return
values.

Since lookups return Maybes, we can exploit these typeclasses to make
the code more modular. It's hopefully, much easier to switch the order
in which we perform binding lookups after this change, as we let the
alternative and bind implementations handle pattern matching over
structure for us.

eriksvedang/Carp,eriksvedang/Carp,carp-lang/Carp,carp-lang/Carp,carp-lang/Carp