Monadic concurrency semantics.

The base is the Polymorphic ML Ott file. 

On top of that are the following things:
- Product types (pairs)
- Sum types (tagged union)
- Concurrency monad with the following constructors:
   * Live e: a live computation of expression e (type con t where e : t)
   * Dead v: a finished computation of value v (type con t where e : t)
   * Fork e1 e2: a fork of two computations e1 e2 (type con t1*t2 where
e1 : t1, e2 :t 2
- and the following operation:
   * ret e : returns a Live e
   * e1 >>= e2 : sequencing the two computations
   * fork e1 e2 >!= e3 : cut in. This is the most important design
choice in this commit. If e1 : t1, e2 : t2 then e3 : (t1 * t2) + (t1 *
con t2) + ( con t1 * t2 ) -> con t3. The semantics are, the moment
either or both (allowing for non interleaving semantics) computation
finishes the cut in function is applied, freezing the partial
computation of the unfinished expression.