First attempt at fixing CondExpr:

  - e ? e1 : e2

    If the conditional expressioin is contextually typed as `T` then the type
    used will be:

    forall C . (c: C, x: T, y: T) => { v: T | (if (Prop(c)) then (v ~~ x) else (v ~~ y)) }

    Otherwise the type will be:

    forall C A . (c: C, x: A, y: A) => { v: A | (if (Prop(c)) then (v ~~ x) else (v ~~ y)) }

  - POSSIBLE FIX: add guards when typechecking e1 and e2 in Liquid, since we
    know that e is truthy or falsy in each case.
Adding guards when LQ TCing the parts of CondExpr

  -- Needs some cleanup
Simplifying stuff regarding conditional exprs.

  - Adding casts in TC when there is a contextual type

  - No need to cast again for base types in liquid - just do the call to
    BICondExpr.