[dart:io] Remove collisions from IO Service port dispatch
[dart:io] Remove collisions from IO Service port dispatch

This change prevents IO Service requests from colliding on the same
IO Service port. If requests can collide, a request that could otherwise
be serviced immediately can become blocked on a request that is blocked.

To avoid collisions, this change maintains a free list of IO Service
ports. If the free list is empty, we allocate a new IO Service port.

R=bkonyi@google.com

Review-Url: https://codereview.chromium.org/2903593004 .

dartino/dart-sdk,dart-archive/dart-sdk,dart-archive/dart-sdk,dartino/dart-sdk,dartino/dart-sdk,dart-archive/dart-sdk,dart-lang/sdk,dartino/dart-sdk,dartino/dart-sdk,dart-archive/dart-sdk,dart-lang/sdk,dart-lang/sdk,dart-lang/sdk,dart-archive/dart-sdk,dart-lang/sdk,dart-archive/dart-sdk,dartino/dart-sdk,dartino/dart-sdk,dartino/dart-sdk,dart-lang/sdk,dart-archive/dart-sdk,dart-lang/sdk,dart-archive/dart-sdk,dartino/dart-sdk,dart-lang/sdk,dart-archive/dart-sdk