Implement va_arg() in C instead of assembly.

The implementation of va_arg was written in assembly and that was
not readable. This patch is to rewrite that in C.

Most information required for va_arg was already in va_list. The only
lacking one was the register class for a type. I added a new builtin
__builtin_reg_class to get the class as defined in the x86-64 ABI
specification (though the classification is incomplete.)
Fix spellings.