Improve parsing issues around attributes

By the strict handling of prefix attributes, we can improve situations of some parsing issues.

1. Detect more redundant/conflicting attributes around constructors and destructors, .

    ```d
    pure  this(int) pure {}       // no error -> Error: redundant attributes
    @safe this(this) @trusted {}  // no error -> Error: conflicting attributes
    ```

2. Improve diagnostic for the [issue 6677](https://issues.dlang.org/show_bug.cgi?id=6677).

    ```d
    shared pure static this() {}
    // no error -> Error: use 'shared static this()' to declare a shared static constructor
    ```

3. Partial fix for [issue 8081](https://issues.dlang.org/show_bug.cgi?id=8081).

    ```d
    pure nothrow unittest {}
    // -> Will not appear in generated header file anymore.
    ```