In operator

Addressing issue #21.

Adding flag `-e` that adds extra invariants in refinement types (for the moment just `keyIn` for object types).



This PR includes #44 that addresses issue #32:

Re-implemented features:

* **Conditional Expressions**:
 `e ? e1 : e2`
They are transformed to a call to a function with signature: `forall C . (c: C, _t: T, x: T, y: T) => T`, with arguments:
  - The condition expression
  - A phony expression with: 
    - The contextual type `t` if there exists one
    - Top, otherwise
  - The first conditional expression
  - The second conditional expression

Examples: `tests/pos/misc/poly-0x.ts`, `tests/pos/operators/choice.ts`

* **User defined casts**: `<T> e`
They are transformed to a call to a function with signature: `forall T. (c: T, x: T) => T`, with arguments:
   - A phony expression with the cast type
   - The casted expression

Examples: `tests/pos/misc/poly-03.ts`