Keyword plugin for "typed Integer $foo"

and "typed Integer ($foo, $bar, $baz) = (1,2,3)" and friends.

This is done by means of a keyword plugin that takes control of the
parser when it hits the "typed" keyword. The plugin is properly scoped
by use of the "Perl::JIT" module and a hints hash entry.

The plugin parses the keyword and the type, validates the type, then
goes ahead and sneakily injects a " my " into the parser input, and
hands control back to the parser until the end of the statement. This is
nasty, but allows all the same expressions following a typed "my" as it
allows after a normal "my". It then proceeds to walk the emitted OP tree
and extracts all PADSV OPs with the LVALUE intro flag set. It creates an
unordered map of objects associating the OP with the type [FIXME
ownership issues with the Type object]. The result is attached to the CV
as "ext" MAGIC. Multiple such typed declarations will write to the same
unordered map attached to the CV. There's an API function to get the
unordered map from a CV (if any).

Seriously requires cleanup. In particular, the type object ownership is
a mess that could likely be easily cleaned up by somebody who doesn't
suck at C++.