Tweaks for next rakudo release
Rewrite of List.(uniq|squish) using map()

For "my @a=1..100000; my @b= @a.(uniq|squish) the improvements were:
  uniq:   CPU from 0m23.214s to 0m10.107s  (aka 56% less CPU)
  squish: CPU from 0m10.911s to 0m7.790s   (aka 28% less CPU)
Start preparing MOP for Buf[T] and native arrays.
Initialize sprintf argument handler when needed.
Make {@keys}:k use slighlty less CPU
Further MOP support for Buf and native arrays.

This gets us able to write parametric roles whose parameterization
conveys the type to do layout with down to the VMArray REPR.
Avoid a couple of checking/reporting explosions.
Start replacing Buf.

Buf is now a role, as per spec. We also provide buf8, buf16, buf32 and
buf64 symbols in the setting, which are instantiations of it. However,
VMArray isn't quite smart enough to pack those as it should yet. Much
previous Buf functionality is still missing; it will be added back
before this branch is merged.
Add Blob, blob8 etc., utf8 etc.

The utf8 type doesn't work yet, due to missing REPR data serialization
in VMArray.
Change name sprintfAddHandler to sprintfaddargumenthandler.
Get Str.encode working for new Buf implementation.

It now also returns utf8/utf16/utf32 types when appropriate, falling
back to blob8 for the rest of the cases. With this, both unpack.t and
pack.t now pass on JVM (will need some work on Parrot to get things to
work again there, though).
Add decode for new Buf implementation.

Again, will need some work to get this supported on Parrot too. Also
added .Str that works to utf8/utf16/utf32 types since they carry their
encoding around with them.
Standardized error where EnumMap type objects are used as invocant when they shouldn't
Make some lower level error message more understandable

Hash.pairs now says
  "Invocant requires an instance, but a type object was passed"
instead of:
  "Parameter '' requires an instance, but a type object was passed"
Start to get Buf ops back in place.

Since Buf ~~ Blob, they are now really blob ops. Done some tweaks to
try and adapt a little better to the new range of types available.
Unfortunately, the ops all seem to hit a multi-dispatch conflict.
Make ListIter.infinite return Bool when it can't make up it's mind.

This at least makes (1..Inf).uniq.infinite return Bool rather than Mu
Only do this parrotism when Parrot is the VM (in DUMP)
In comments, Change Parrot-centric mention of RPA to more general VM's array
Make .infinite return Nil rather than Bool/Mu when it doesn't know

<TimToady> .tell lizmat These days Nil is considered the best way to indicate "missing information"
Scratch misspelling OCD itch