subroutine signatures

Declarative syntax to unwrap argument list into lexical variables.
"sub foo ($a,$b) {...}" checks number of arguments and puts the
arguments into lexical variables.  Signatures are not equivalent to the
existing idiom of "sub foo { my($a,$b) = @_; ... }".  Signatures are only
available by enabling a non-default feature, and generate warnings about
being experimental.  The syntactic clash with prototypes is managed by
disabling the short prototype syntax when signatures are enabled.
Merge blead into zefram/purple_signatures
more torture tests for signatures

Based on tests supplied by Robert 'phaylon' Sedlacek.
more tests for signatures
merge basic zefram/purple_signatures into blead