Implement a Once primitive for initialization

Of the 8 static mutexes that are currently in-use by the compiler and its
libraries, 4 of them are currently used for one-time initialization. The
unforunate side effect of using a static mutex is that the mutex is leaked.

This primitive should provide the basis for efficiently keeping track of
one-time initialization as well as ensuring that it does not leak the internal
mutex that is used.

I have chosen to put this in libstd because libstd is currently making use of a
static initialization mutex (rt::local_ptr), but I can also see a more refined
version of this type being suitable to initialize FFI bindings (such as
initializing LLVM and initializing winsock networking on windows). I also intend
on adding "helper threads" to libnative, and those will greatly benefit from a
simple "once" primitive rather than always reinventing the wheel by using
mutexes and bools.

I would much rather see this primitive built on a mutex that blocks green
threads appropriately, but that does not exist at this time, so it does not
belong outside of `std::unstable`.
Stop using @ExtCtxt
Remove unecessary extern "Rust" specifiers
Stop passing duplicate parameters in expand
rust.md : update crate attributes.

#[ author = "Jane Doe" ]; raises "warning: unknown crate attribute"
Add /doc/{green,native} to .gitignore
Add method .as_mut_slice() to MutableVector

This method is primarily intended to allow for converting a [T, ..N] to
a &mut [T].
Add /doc/{rustc,syntax} to .gitignore
Rename pkgid variables
Rename PkgId to CrateId
Rename uses of PkgId to CrateId in librustpkg
Update Docs to use crateid
Register new snapshots.
Actually block in a windows cvar

Turns out with an argument of 0 the function always returns immediately!

Closes #11003
rustdoc: only filter lines starting with '# ' from the shown code.

Currently any line starting with `#` is filtered from the output,
including line like `#[deriving]`; this patch makes it so lines are only
filtered when followed by a space similar to the current behaviour of
the tutorial/manual tester.
rustdoc: Unify the handling of the hidden example lines.
Make ast_fold take &mut self
Start passing around &mut ExtCtxt
Remove @muts from ExtCtxt
auto merge of #11168 : sfackler/rust/de-at-extctxt, r=alexcrichton

* Pass `&ExtCtxt` instead of `@ExtCtxt`.
* Stop passing duplicate parameters around in `expand`.
* Make `ast_fold` methods take `&mut self`.

After these, it should be possible to remove the `@mut` boxes from `ExtCtxt` altogether, though #11167 is doing some of that so I'm holding off on that for now. This will probably conflict with that PR, so I'm guessing that one will have to be rebased on top of the other.

r? @pcwalton