Sat Aug 18 16:08:24 EDT 2018

Term type cleanup

This requires a lot of code changes, so might not be the thing to do
at this moment.

Basically, I want to get to this:

data Form n =
  | Comb1    Seq.Op1 n
  | Comb2    Seq.Op2 n n
  | Comb3    Seq.Op3 n n n
  | Slice    n Seq.SSize Seq.NbBits
  | Delay    n
  | Connect  n
  | Mem      (n,n,n,n)
  | Input    -- Externally driven node
  deriving (Show, Functor, Foldable)

The changes to the original Term:

- Flatten Term (Op n) to Form n.  This is already implemented.  It
  seems necessary to be able to keep the non-monadic constants.

- Change the memory representation such that memory is just an i/o
  function.  The read data register can then be added as a normal

- This then allows SType to be factored out of the Form type.