rustpkg: Clean up usage messages for install
rustpkg: Handle non-numeric versions; some cleanup

Package IDs can now be of the form a/b/c#FOO, where (if a/b/c is
a git repository) FOO is any tag in the repository. Non-numeric
tags only match against package IDs with the same tag, and aren't
compared linearly like numeric versions.

While I was at it, refactored the code that calls `git clone`,
and segregated build output properly for different packages.
rustpkg: Don't assume a non-numeric refspec is a tag

Just pass it directly to git, without prefixing it with tags/
docs: Talk about tags that aren't versions in the "Package identifiers" section
std: Rename Iterator adaptor types to drop the -Iterator suffix

Drop the "Iterator" suffix for the the structs in std::iterator.
Filter, Zip, Chain etc. are shorter type names for when iterator
pipelines need their types written out in full in return value types, so
it's easier to read and write. the iterator module already forms enough
namespace.
std: Implement Clone and DeepClone for extern "Rust" fn

Implement Clone and DeepClone for functions with 0 to 8 arguments.
auto merge of #8032 : catamorphism/rust/rustpkg-tags, r=graydon

r? @graydon    Package IDs can now be of the form a/b/c#FOO, where (if a/b/c is
    a git repository) FOO is any tag in the repository. Non-numeric
    tags only match against package IDs with the same tag, and aren't
    compared linearly like numeric versions.
    
 While I was at it, refactored the code that calls `git clone`,  and segregated build output properly for different packages.
auto merge of #8109 : blake2-ppc/rust/extern-fn-clone, r=thestinger

Implement Clone and DeepClone for functions with 0 to 8 arguments.  `extern fn()` is implicitly copyable so it's simple, except there is no way to implement it generically over #n function arguments.

Allows deriving of Clone on structs containing `extern "Rust" fn`.
auto merge of #8090 : blake2-ppc/rust/iterator-adaptor-names, r=pcwalton

Drop the "Iterator" suffix for the the structs in std::iterator.
Filter, Zip, Chain etc. are shorter type names for when iterator
pipelines need their types written out in full in return value types, so
it's easier to read and write. the iterator module already forms enough
namespace.