[SPARK-3398] [EC2] Have spark-ec2 intelligently wait for specific cluster states

Instead of waiting arbitrary amounts of time for the cluster to reach a specific state, this patch lets `spark-ec2` explicitly wait for a cluster to reach a desired state.

This is useful in a couple of situations:
* The cluster is launching and you want to wait until SSH is available before installing stuff.
* The cluster is being terminated and you want to wait until all the instances are terminated before trying to delete security groups.

This patch removes the need for the `--wait` option and removes some of the time-based retry logic that was being used.
I considered that, but I wonder if it would actually be useful to do that. If the cluster is taking a while to launch, putting the hard stop will just get in the user's way. They'll have to relaunch with `--resume` anyway, right? I think it might be more straightforward to deprecate the option completely and just let users `Ctrl + C` if they feel the launch is taking too long or if they know something else is wrong. What do you say?