Created a functional printf

Includes support for characters, strings, integers, and floats.

No support for long types, and there are some little bits of
rarely used functionality that is missing.

The issues with previous printfs turns out to be related to how
varargs casts floats. It manages to cast 32-bit floats all the way
to 64-bit floats despite the lack of 64-bit floats on the processor.

Hacky bittwiddling was necessary to extract the actual 32-bit float
value from varargs.