Add a slighter more sane way to use pure scratch registers

  The concept is to have a few (currently 2) pure scratch registers,
that, if available, are used as fallback, and in some cases they may
need to be live after a call to some vm function, e.g. to validate
range, type, etc, or to load an object with type not known at parse
time.
Add code to not allow setting an object to an incompatible type

  Since dynamically typed values are only set in the fallback vm
C functions, it is easy to check the type before making the assignment.
  Now the jit code is safe when only checking if a value is null, and
otherwise dereferencing the data based on compile time type information.
  Later there should be added optimizations for the vm, and in that
case, it should generate jit to check type compatibility where applicable.