Implement FromStr for IpAddr and SocketAddr

Better than that in rt::uv::net, because it:

* handles invalid input explicitly, without fail!()
* parses socket address, not just IP
* handles various ipv4-in-ipv6 addresses, like 2001:db8:122:344::192.0.2.33
  (see http://tools.ietf.org/html/rfc6052 for example)
* rejects output like `127.0000000.0.1`
* does not allocate heap memory
* have unit tests
Use FromStr for IpAddr in rt::uv::net
Better documentation for --emit-llvm option.

Document possible use with -S option.
Hide stuff that are not used outside of _match.rs
Added testcases for `match` keyword

Added testcases for `match` keyword including test for issue #5625.
Fix bug in `match`ing struct patterns

Code that collects fields in struct-like patterns used to ignore
wildcard patterns like `Foo{_}`. But `enter_defaults` considered
struct-like patterns as default in order to overcome this
(accoring to my understanding of situation).

However such behaviour caused code like this:
```
enum E {
    Foo{f: int},
    Bar
}
let e = Bar;
match e {
    Foo{f: _f} => { /* do something (1) */ }
    _ => { /* do something (2) */ }
}
```
consider pattern `Foo{f: _f}` as default. That caused inproper behaviour
and even segfaults while trying to destruct `Bar` as `Foo{f: _f}`.
Issues: #5625 , #5530.

This patch fixes `collect_record_or_struct_fields` to split cases of
single wildcard struct-like pattern and no struct-like pattern at all.
Former case resolved with `enter_rec_or_struct` (and not with
`enter_defaults`).

Closes #5625.
Closes #5530.
Fix node hashes
extra: Remove all .each methods in smallintmap
std: Fix for-range loops that can use iterators

Fix inappropriate for-range loops to use for-iterator constructs (or
other appropriate solution) instead.
Bugfix .each_edge in middle/graph.rs

Edge iterator used the length of the nodes vector, must be a mistake.
rustc: Fix for-range loops that can use iterators

Transform range loops that can be regular iterator loops.
Implement DoubleEndedIterator on Range

Range is now invertable as long as its element type conforms to Integer.

Remove int::range_rev() et al in favor of range().invert().
Forbid `priv` where it has no effect

This is everywhere except struct fields and enum variants.
Add missing getopts::groups::optflagmulti function
Turn OptGroups into a main opt and a main and an aliased opts

This way opt_present("apple") will match no matter if the user passed -a or --apple
add inflate_bytes_zlib to exra::flate
add extra::flate::deflate_bytes_zlib and a test
extra: add `internal` to {de,in}flate_bytes_ naming to address nit
Fix unit structs in cross-crate situtations
Change Freeze to Static