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.