Replacement of APM usage with TAP and async/await

As part of a research project at the University of Illinois at Urbana-Champaign, we're developing a refactoring tool that replaces instances of the APM pattern with corresponding TAP method calls and the async/await keywords. I've applied it to this project.

This pull request replaces those existing calls to APM Begin/End* methods with functionally equivalent TAP constructs and the async/await keywords. It decreases the code complexity a lot.

I also added a dependency that is needed: Microsoft.Bcl.Async by Microsoft. This package improves support for async/await-based programming for older frameworks, or frameworks that are missing functionality.

Are you interested in merging this pull request? If not, please let me know why, and I'll try and improve the pull request with your comments in mind.

Thanks for your time,
Semih Okur