Move the size into varheap

I got it wrong before; if one var changed a varheap, other vars
pointing at it would then hold the wrong size.  This change means that
it's the varheap that keeps its own size.  A few other things become
easier too, like the string terminators.  Also, a varheap never
regresses back to a var when the size reduces to 1 for the same
reason.  This in turn means that it's not possible to infer whether a
var of size 1 is on the heap or not, so there's a TYPE_ARRAY to say so
explicity.