The following adjustments improve performance at large scale:
* Save the quota object earlier in the state machine. This is
still using cached data, but it's not necessary to re-run this
each time.
* Flatten iterators returned from cached methods. Some of our
methods intended to cache heavy list responses were in fact
only caching the iterator, and re-iterating would end up
re-running the request. This change does two things: it causes
the iteration to happen within the rate limit calculator so we
have a better idea of how long it actually took, and it causes
the actual data to be put in the cache so that we don't re-run
the request.
* Don't create a second instance object after creating the
instance. The create call returns an instance object in the
form that we expect already. Avoid creating a second one which
incurs another DescribeInstances call.
Change-Id: I73bc099b450879917ab923fb7371f8006b113d68