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.
further tweaks to POD

expanded "Traits and defaults" section to "Mixing value constraints, traits, and defaults"
added Damian to the "THANKS" section
removed the "where" constraints as a difference between MSM and MXMS, since "where" now works
mentioned "yada yada" as a partial replacement for placeholders in the MSM/MXMS comparison
changes necessary to make all tests run under 5.8.9

also had to add one more fatal error in the parser for running under 5.8.9 and trying to use 'where'
keep $TYPESPEC from always matching

as discussed in pull request #56
see also https://github.com/schwern/method-signatures/commit/069ad98aee6f22e4b1c70ef7bfcbcfbc56bb23b4#L1R51
refactoring where constraint errors into its own error routine
as discussed in pull request #56
see also https://github.com/schwern/method-signatures/commit/c8477e97da56a50608660ee31d353bdb61a496b3#L0R995
removed unnecessary double quotes
Merge pull request #56 from schwern/damian_features

merging in branch to provide when & where

Code review complete; time to merge and dev release!