auto merge of #9823 : pnkfelix/rust/issue7655-bench-papercuts, r=alexcrichton

r? anyone.

You can see a bit more discussion on #7655.

This does not close any ticket; I am just scratching an itch.  Note in particular that I picked the value `{:>9} ns/iter` pretty much out of a hat.  :)
add rudimentary support for parsing attributes via both old and new syntaxes.
Update pretty-printer to use the new attribute syntax.

However, at this point the pretty-printer is a bit goofy.
The input:

    ```rust
    mod m {
        #!hmm_looks_like_a_bug         ;

        struct oh;
    }
    ```

pretty-prints via --pretty=normal to:

    ```rust
    mod m {
        #!hmm_looks_like_a_bug;
        #!hmm_looks_like_a_bug         ;

        struct oh;
    }
    ```

This bug is addressed in future commits.
shebang code in `consume_any_line_comment` now requires absoute path.
Revised shebang handling of comment gathering code (only used by pprust!).

This provides a better match in the pretty-printer for the semantics
of the lexer and parser: it only allows for a shebang as the very
first line it encounters (rather than checking for it on every line
during comment gathering).

Makes use of the newly added `lexer::is_at_shebang`, which introduced
the requirement that shebang comments follow the regexp `#!\s*[/\\]`
(that is, pound-bang-whitespace-slash).  The trailing slash reflects
the fact that (portable) shebangs need to use absolute paths.
refactor comments.rs so that pprust material is isolated to its own mod.
Temporarily generalize parser for variety of inner attribute syntax.
Temporarily generalize pretty-printer to variety of inner attribute syntax.

Set INNER_ATTR_TOKEN to one of {bang, pipe, caret, pound} to see it.
Add license to factored file.
Update test to reflect revised attribute syntax (Issue #2569).
Added support for new attribute syntax to the emacs mode.

(It currently attempts to handle all the variant second tokens for
inner attributes under consideration; obviously that should be
eventually restricted to whichever token we do choose.)
Fix test cases to reflect new syntax.