Unify attributes and macros to use `@` sigil, redux

A revised version of @pcwalton's RFC, incorporating a more precise description of conflicts and a description of feedback.

[Rendered view.](https://github.com/nikomatsakis/rfcs/blob/macros-and-attrs/active/0000-macro-attribute-syntax.md)
Decorators are actually a bit more complex than that now. They're split into two different types of extensions: `ItemDecorator`s and `ItemModifier`s. `ItemDecorator`s are given a reference to an `Item` as input and produce some number of *new* items from it. `deriving` is an `ItemDecorator`, it takes in the tagged `Item` and produces `impl` items based on it. `ItemModifiers` take in an item and return a new item what will be used in the input's place.

This split was made to enforce some sanity on the operation of decorators in a world where third party decorators can be written and used together. If one isn't careful, you can end up in sad situations like this. Imagine we have a decorator `#[munge]` that alters names of fields (who knows why). Now say we want to use it along with another decorator like `deriving`:

```rust
#[deriving(PartialEq)]
#[munge]
struct Foo {
    f: int
}
```
Assuming that decorators evaluate top-down, we'll run into some problems. `deriving` will be evaluated first, and produce an impl like
```rust
impl PartialEq for Foo {
    fn eq(&self, other: &Foo) -> bool {
 
}
```