Adds support for working with URL Paths

It is sometimes useful to parse just the path portion of a URL (path,
query string and fragment) rather than the entire URL.
Clarify unit of size in docs for size_of functions.
Changed the docs in mem.rs to clarify the fact the the size functions return sizes in bytes.
Regression test closes #7660
Fix staticlib outputs linking to blank archives

When creating a staticlib, it unzips all static archives it finds and then
inserts the files manually into the output file. This process is done through
`ar`, and `ar` doesn't like if you specify you want to add files and you don't
give it any files.

This case arose whenever you linked to an archive that didn't have any contents
or all of the contents were filtered out. This just involved ignoring the case
where the number of inputs we have is 0, because we don't have any files to add
anyway.
Fix bug with zero-length filemaps and rename bytepos_to_local_charpos to bytepos_to_charpos.
Fix typo in test metric ratchet stdout output
Change the format_args! macro expansion for temporaries

Currently, the format_args! macro and its downstream macros in turn
expand to series of let statements, one for each of its arguments, and
then the invocation of the macro function. If one or more of the
arguments are RefCell's, the enclosing statement for the temporary of
the let is the let itself, which leads to scope problem. This patch
changes let's to a match expression.

Closes #12239.
auto merge of #12349 : edwardw/rust/debug-expansion, r=huonw

Currently, the format_args! macro and its downstream macros in turn
expand to series of let statements, one for each of its arguments, and
then the invocation of the macro function. If one or more of the
arguments are RefCell's, the enclosing statement for the temporary of
the let is the let itself, which leads to scope problem. This patch
changes let's to a match expression.

Closes #12239.
auto merge of #12374 : dylanbraithwaite/rust/size_of_unit_clarification, r=cmr

Changed the docs for std::mem to clarify the fact that the size functions return sizes in bytes.
auto merge of #12375 : FlaPer87/rust/issue-7660, r=cmr
auto merge of #12379 : alexcrichton/rust/fix-ar-thing, r=brson

When creating a staticlib, it unzips all static archives it finds and then
inserts the files manually into the output file. This process is done through
`ar`, and `ar` doesn't like if you specify you want to add files and you don't
give it any files.

This case arose whenever you linked to an archive that didn't have any contents
or all of the contents were filtered out. This just involved ignoring the case
where the number of inputs we have is 0, because we don't have any files to add
anyway.
rustc: support dumping the AST as JSON

This is mostly useful for working on rustc, when one is unfamiliar with the
AST a particular construct will produce. It's a -Z flag as it's very much for
debugging.

Closes #10485
auto merge of #11904 : nick29581/rust/0filemap, r=alexcrichton
auto merge of #12231 : wycats/rust/url_path_parse, r=alexcrichton

It is sometimes useful to parse just the path portion of a URL (path,
query string and fragment) rather than the entire URL.

In theory I could have made Url embed a Path, but that would be a
breaking change and I assume that Servo uses this API. I would be
happy to update the PR to embed Path in Url if that's what people
wanted.
auto merge of #12389 : zr40/rust/fix-test-metric-typo, r=alexcrichton
auto merge of #12387 : cmr/rust/ast-json, r=alexcrichton

See the commits