Add sprintfAddHandler and use it.

This allows you to register a handler which knows how to convert types NQP doesn't know about to bigints.  (Eventually I hope to expand it to floating point values and strings as well.)

I'm not particularly attached to the name sprintfAddHandler, if someone has a better suggestion.
Fix sprintfAddHandler return value.

I deleted the return value just before pushing the last patch.  Turns out it was important.  Whoops.
Added --no-clean and updated usage.
Change name sprintfAddHandler to sprintfaddargumenthandler.
VMArray should serialize its type.

This fixes the issue with the utf8/utf16/utf32 types in the new Buf
implementation.
Get P6int/P6num to take/keep bit size.
Compact int8/int16/int32 array storage.

This means a buf8/utf8/blob8 will actually be a byte array in memory.
Add nqp::encode(...) op for encoding to a buffer.
First pass at nqp::decode(...).
Missing GC marking in VMArray REPR on Parrot.
Set type object STable earlier in deserialization.

Otherwise, things like typed arrays find the types they want to look
at the storage_spec of are not yet complete enough and explode.
Give VMArray its missing get_elem_stable.
Fix VMArray growth logic bug.
A few more missing VMArray pieces Buf needs.
nqp::encode and nqp::decode on Parrot.
Make nqp::encode take a buffer, not create it.
Add a test for 'is positional_delegate' and 'is associative_delegate'.
Test that positional_delegate and associative_delegate are visible through the metamodel.