Implement the typeof keyword.

  Note that it does not work like the gcc typeof keyword; instead it
returns a "normalized" type, that is t_word for values that fit in a
GPR register, t_float32 or t_float64 for floats, or the actual runtime
type, so that static and dynamic values should return the same value.
  It should be a bug if a static and dynamic argument to typeof returns
different values. Also, for some special values it will differ if
running the vm in 32 bit or 64 bit; this is expected for values that
fit the "unsigned word" range.