Performance improvements.

Makes massively fewer service definition requests when instantiating a
lot of next-step handlers. It does this by caching the results of one
request and sharing the data between instances.