Don't swallow OCE unconditionally (dotnet/corefx#38473)
- Today we swallow OperationCanceledExceptions to avoid throwing if CancelPendingRead/CancelPendingFlush, this unintentionally swallows all exceptions that derive from OperationCancelled that were triggered by the ReadAsync call itself. This change rethrows the error unless we're in that specific case of having called one of those Cancel* methods.
- Added tests and did some other small test cleanup.
Commit migrated from https://github.com/dotnet/corefx/commit/
b3d3267abca4ae5bd8d4542a02c08a3173ae1ab9