Make kube-down more robust for GCE provider

This PR makes `kube-down.sh` more robust for the GCE provider. Before, the deletion of resources did not always succeed and running kube-down a second time would not always clean up remaining resources. This PR changes kube-down to find out what the running resources (instances, firewall rules, routes) are and then attempts to delete them. Occasionally, something may go wrong:
```
Deleting firewall rules kubernetes-minion-1-all kubernetes-minion-2-all kubernetes-minion-3-all kubernetes-minion-4-all
ERROR: (gcloud.compute.firewall-rules.delete) Some requests did not succeed:
 - Backend Error
```
in which case `kube-down.sh` can be run again.

For taking down very large clusters this is very useful to avoid a lot of manual deletion (or writing custom scripts).

Another change I made was to give the gcloud commands a list of instances etc. are arguments rather than use a loop and run a separate gcloud command per resource. These commands are run in the foreground so the final wait has been removed. We may need to revisit this decision for large clusters.

@jbeda @cjcullen 
You are right.  If you declare/local and set it to the output of the subshell the failure gets ignored.

So -- this won't exit on the error:
```console
$ bash -e -c 'declare foo=$(exit 1); echo here'
here
$ echo $?
0
```

But this will:
```console
$ bash -e -c 'declare foo; foo=$(exit 1); echo here'
$ echo $?
1
```

So, for this code, it means you need to declare the local before setting it.
```bash
local -a minions
minions=($(...))
```