Overload precedence

This fixes constructs like ArrayRef[Str] | HashRef[Str] in perls older than 5.14.

It does this by having [Str] | HashRef[Str] return a 'HalfOp' object, which parameterizable types know how to interpret.