Async all the way.

AbstractService<T> had the following issues:

- the type variable T was reused in multiple places.
- all calls had to specify the type, but only one call to AddAsync<T>
actually uses a different type. Therefore, only that method accepts a
type parameter.
- nested callbacks for tasks are not necessary in .NET 4.5.

As a "side effect", all method calls in the services are now async, and
output `Task<T>` instead of `<T>`.  They also changed names so as to
more easily know that something broke.