compiler: Formatting and typo fixes

- Change "CapturedImmutatable" in to "CapturedImmutable"

- Clean up whitespace
planner: Value tracking cleanup

- Switch the planner from having separate "immutables" and "mutables"
  maps in to a single "values" map that contains a LocationValue case
  class.

- Only decide if a variable is immutable/mutable at creation time and
  have future acceses look at the LocationValue. This is so the planner
  can create recursive values "honorary mutables" later on

- Rework the lambda closed over variable calculation to be more readable
planner: Factor out bind planning to own function

Recursive value support is going to complicate bind planning. Move it
out of PlanExpression to hide away the complexity
Support for recursive value definitions

- Add a concept of "undefined" fields in a record type. Internally
  these are implemented as null pointers. As such they only work with
  pointer types at the moment

- Expand the planner's concept of mutable values to include mutable
  values that need to be checked for undefined values

- When we detect a definition references an uninitialized value created a
  checked mutable before evaluating that definition. The checked mutable
  is known as a recursive value.

- After the definition for the recursive value happens set the value as
  defined by updating the checked mutable. If the value is immutable
  after this point it will be converted in to a first-class immutable to
  reduce the optimizer impact. Otherwise, the checked mutable will be
  converted to an unchecked one