Add support for non builtin varargs functions

  The language also makes a "funny" usage of the sizeof keyword, that
returns the length of a vector (in base size units) and zero for non
vector types. If the sizeof argument is '...' it returns the number
of varargs arguments, that can be accessed with a vector access
notation, for example:  "v = ...[1] + 10;"

  This patch also adds a test case and extra code for complex
expressions that did show a problem with operands reuse in loops, where
the dynamic offset of a vector access was adjusted to the proper offset
in bytes, but after that, if in a loop, it would adjust again, what
would cause an out of bounds exception. To work in backends with too
few registers, a new global flag or registers to not be spill/reloaded
was added, to avoid double spill/reload and reload of the wrong value,
so that it could still adjust the offset, but load back the unmodified
value; this obviously is subject to optimization, as it will currently
do a lot of unnecessary operation on loops changing vector values.