Add SmallVector to libsyntax
Support multiple item macros

Closes #4375
Clean up SmallVector use a bit
auto merge of #10649 : sfackler/rust/multi-macro, r=huonw

The majority of this change is modifying some of the `ast_visit` methods to return multiple values.

It's prohibitively expensive to allocate a `~[Foo]` every time a statement, declaration, item, etc is visited, especially since the vast majority will have 0 or 1 elements. I've added a `SmallVector` class that avoids allocation in the 0 and 1 element cases to take care of that.