first cut at adding a //= default

It adds a second kind of default to Method::Signatures,
so that instead of:

    func foo ($opt_arg?) {
        $opt_arg //= $DEFAULT;
        ...
    }

you can just write:

    func foo ($opt_arg //= $DEFAULT) {
        ...
    }

I submit it for your consideration, with the full disclosure that we
have not approved such a mechanism for Perl 6. And that Larry may well
never allow it. Personally, I find it natural and obvious, but I leave the
decision entirely up to you both. >;-)
prettied up formatting for is_optional a bit
switched test file from no_plan to done_testing
changing //= default to "when undef"

The "when * < 0" syntax is borrowed from Perl 6, where it's a standard and
widely used feature. But I agree that it might be a little too funky for
MS. See the attached next-generation patch, which uses a Perl 5
compatible block-and-$_ syntax instead. Much more appropriate, I think.

Note that, compared to the previous submission, the attached patch also
has more robust parsing of 'when' modifiers.
patched up new test files to use done_testing style
vast improvements to signature parsing

It provides the following enhancements (some as previously discussed,
others as fixes to problems encountered along the way):

    * Implements '= $DEFAULT when $CONDITION'
      (with default and condition parsed via PPI)

    * Implements '= $DEFAULT when {BLOCK}'
      (with default and block parsed via PPI)

    * Implements '//= $DEFAULT'
      as a short-cut for '= $DEFAULT when undef'

    * Documents these new default mechanisms

    * Improves parsing of explicit method invocants
      (specification errors like '\:$param' no longer treat '\' as invocant)

    * Improves parsing of disjunctive type specifications
      (no longer restricted to a maximum of two alternatives)

    * Improves parsing of parameterized type specifications,
      which may now be nested: func foo(ArrayRef[HashRef[Int]] $array)

    * Improves error messages issued during signature parsing
      (and refactors that code to reuse it for run-time error messages as well)

    * Improves documentation of signature syntax slightly
      (via ASCI art!)

    * Fixes a minor bug in t/named.t
      (traits specifications must precede defaults)

    * Adds test cases for all new features and most other fixes

In testing, I can detect no measurable difference in performance under these
changes, except that a couple of tests involving more complex signatures
actually seem to compile a percent or two faster.
patched up new test file to use done_testing style
changing // to || so it will work on Perls < 5.10
clarified a confusing bit in the ASCII art picture
now can do where constraints

I realized that (a) I really need the 'where CONSTRAINT' feature *now*,
and (b) the previous PPI-based parameter parsing patch makes that
extension extremely straightforward.
added the yada yada pseudo-parameter

For example, please find attached another patch that implements a
proposed solution to the issue under discussion here:

    https://github.com/schwern/method-signatures/issues/49

For once, it's not stolen from Perl 6, but rather from Vimscript.
It implements a '...' pseudo-parameter (known as "yada yada")
that simply turns off all checking for extraneous arguments.

I think it's a clean, readable, and "intentional" solution to the
problem and would encourage both of you to consider it.