refactor lambdas to types in Test.pm
refactor lambdas to types in Test.pm

This is how it used to look, before
20512792cc9feebe32072aa2024f7e16fe5b77d6. Now we're back to simplicity.

Instead of lambdas, we're now introspecting to know where the positional
arguments go. I tried to make the process as non-fragile as I could in
the face of Q classes changing. Still, we need to account for

- varargs (in the form of Val::Array attributes)
- optional parameters (where attributes have defaults)
- operators having an implicit 'identifier' attribute

We take a small speed hit from doing it this way instead of with
hard-coded lambdas. A quick-n-dirty benchmark shows that a hot `prove`
just went from ~86 seconds to ~97 seconds with this commit. We could
probably do better by creating and caching the lambdas, but I'm not
sure the extra machinery is worth those ~11 seconds.

masak/007,masak/007,masak/007