Changed data container to pointer encoding

* By using a trick we can greatly reduce
  the number of variables in each var.
  Instead of having a pointer of each type
  we rely on this trick:

  type :: ptr
    real, pointer :: p
  end type ptr
  type(ptr) :: p
  character(len=1), allocatable :: enc(:)
  real :: a(2)

  allocate(enc(size(transfer(a,p)))
  enc = transfer(a,p)

  which enables retrieval of the encoding
  again later.

  Many thanks to Alberto Garcia for providing
  an example and telling me about this method!

* TODO finish the example conversion.