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 
Few suggestions
- You probably want to break this line to make it more readable, use `\` for line continuations;
- You probably want to quote the full regexp to prevent the shell from treating the `[0-9]` part magically;
- You don't need `tail | awk` since `awk` can does the whole job for you.

```shell
  minions=( $(gcloud compute instances list \
      --project "${PROJECT}" --zone "${ZONE}" \
      --regexp "${INSTANCE_PREFIX}-minion-[0-9]+" \
      | awk 'NR >= 2 { print $1 }') )
```