Codeplex-1431 Support buffered async request stream in web host

This change allows WebAPI to use the async buffered request stream
in web host.

There are two ways to get a buffered request stream in webhost:
- GetBufferedInputStream(): is async, and buffered, but not seekable
- InputStream: is buffered and seekable, but not async

This causes a problem, because async is good... but we need seekable
streams, as we've surfaced this functionality to the user-code.

Conveniently, once you've read to the end of the GetBufferedInputStream,
it will also fully populate the buffer of InputStream. The fact that the
buffer of InputStream is fully populated means that its non-async
operations become preferrable once the buffer is finished loading, so we
have a stream that's seekable, and buffered, and we no longer care about
async at that point.

The solution is to wrap up both of these streams, so that once we've read
to the end of the 'async' stream, we start using the 'non-async' stream.
This offers the performance advantages of both cases, while preserving
seekability.

The special case we have to handle for seek is when the 'non-seekable' stream
is being used, we finish reading the end and then swap to the 'seekable'
stream. This needs to be done syncronously because of the contract for
Seek. This will only really occur in cases where user code gets the stream
and manually does seek operations instead of just reading it. Basically we
don't expect this case to be common, and it should perform about as well as it
currently does.

Katana already has a similar solution in place, and I borrowed some ideas
from them - our version is a bit simpler because we have simpler
requirements.

(cherry picked from commit addff083c4cf60c390ccb1e217fde4a369004b99)