Add '--depth' to 'git submodule update'

Fixes https://github.com/travis-ci/travis-ci/issues/1867
Merge branch 'master' into ha-feature-gh-submodule-depth

Conflicts:
	spec/shared/git.rb
Make --depth flag optional for 'git submodule update'

The opts path `git.submodules_depth` is up for debate
Define depth_opt in all situations
Change `eval "$@"` in travis_retry to `"$@"`, take II

I first attempted making this change in
30109b352a124ca78246b78911a6c3b87b743deb, but that broke a lot of other
commands. This approach works much better, as it only runs "eval" when
it is needed.
only test on MRI 2.1.x
Decode the SSH key in build instead of on the VM
Add initial Rust support
Change Rust install to not use sudo

Instead of putting everything in /usr, put it in ~/rust and add
~/rust/bin to the PATH.
move "cabal build" to install
change some of the rust specs

and comment some out until I can get them to pass
stub out cargo and cabal commands in the specs
add some rust spec back

but reworked a little
correct the ansi colour codes

Mā is white, whero is red, kākāriki green 
Pango is black, pangu is too, A. E. I. O. U. 

Kōwhai yellow, pākākā brown, kiko-rangi blue 
Pa-raka-raka is our orange, A. E. I. O. U.
Fix Rust specs
Add ~/rust/lib to LD_LIBRARY_PATH
Announce the cargo version for Rust builds
Run `cargo build` in `script` phase

The analog to C builds is “make && make test”.

cargo build and cargo test can in theory have different flags when
compiling (one is compiling the actual library/binary, the other a
special test binary), so both of them should be run. The fact that
things do/don’t compile is a sort-of test in itself, so running them in
`script` seems more appropriate.
Move Rust and Cargo install into a fold
Split up cargo build and cargo test

This makes it easier to see where one command ends and the other starts.