Expand macro documentation

These changes are based somewhat on the [discussion on the julia-users list](https://groups.google.com/d/msg/julia-users/YTZM3Biy-rM/m0orpSjQ8RIJ) and somewhat on my own stumbling points as I was learning how macros worked.

Here's the motivation behind these changes:

* Stress that macros *return* an expression to be evaluated, and hopefully make it look like they're less magical to newcomers. Make `return` explicit in the examples, so it looks less like textual substitution and more like a mapping from exprs to an expr.
* Provide an example where the macro is more than just return an expression. The changes to `@assert` since the original documentation was written make this very natural without needing to contrive another example.
* Use function such as `macroexpand` and `dump` in the examples to help make things more concrete and give users tools to play with.
* Make the hygiene section introduction a bit more clear, with an emphasis that the only thing it needs to worry about is the returned expression.

I think this should help folks 'get' macros a bit quicker. I hope.
Implement hash-checking on downloaded dependencies

Dependencies will be checked at extraction-time, and have their checksums stored
in deps/checksums/. The deps/jlchecksum command tests a given filename against the
checksums stored in that file, supporting MD5 and SHA512 checksums for all
recorded files.  SHA512 is preferred, with MD5 available as a fallback in the
case that `shasum` is not available.  If the hashes do not match, an error is
thrown and compilation is halted.  If a file is asked for and no hash has been
given for that file, the hash is generated for both SHA512 and MD5, and stored
Add an item into NEWS.md
More verbose/user friendly error messages in jlchecksum
fix #6840, bad indexing result type for abstractly-typed index vector

the core problem was that we couldn't infer the type of convert(Int,x::Real),
because there are way too many matching methods. this argues for a
conversion operator that expands to `convert(T,x)::T`, or a way to declare
an overall type for `convert`.
use convert instead of ntuple in pointer_to_array
Merge pull request #6773 from JuliaLang/sf/depchecksums

Ensure downloads are correct via checksums
Travis has turned on multi-os support for this repository, let's use only linux builds for now!
Merge pull request #6794 from mbauman/doc-macro

Expand macro documentation