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.