Add a short section on ARC
rustc: Switch ty::node_type_table to smallintmap, cut 400mb memory use off a librustc build.

Smallintmap was being populated with sparse keys during ast deserialization.
auto merge of #6752 : osaut/rust/tutorial-tasks, r=graydon

* Add a short section and an example illustrating the use of ARC. 
* Header for the section of Future changed to be more descriptive: "Backgrounding computations: Futures".
auto merge of #6776 : graydon/rust/node-type-table-hashmap, r=thestinger

Smallintmap was being populated with sparse keys during ast deserialization.
Refactor optimization pass handling.

Refactor the optimization passes to explicitly use the passes. This commit
just re-implements the same passes as were already being run.

It also adds an option (behind `-Z`) to run the LLVM lint pass on the
unoptimized IR.
Fix pass creation typo
Move the initial dead prototype removal pass
Remove passes that were causing bad optmizations
Remove now-unused import