First draft inferrence engine

This is a type inferrence engine that takes an FRB expression and the
types of objects in scope and makes a best-effort attempt at determining
the type of the expression.

Emphasis on first draft. You will see the TODOs.