Fix sending multipart bodies through SocketChannel

As per documentation, selector.select() returns only keys that have
updated and therefore even if it return zero, it doesn't mean that
selectedKeys wouldn't contain keys that are writable.

See http://stackoverflow.com/questions/9939989/java-nio-selector-select-returns-0-although-channels-are-ready and http://docs.oracle.com/javase/7/docs/api/java/nio/channels/Selector.html#select() for more details.

This commit utilizes the same maxSpin already used in FileChannel case
for detecting that writing has stuck somewhere.  A configurable
timeout for select would be the obvious better solution.