streams: refactor Stream.write / writelines and Pipe.write2

- Use a single function: write, which accepts only bytes or sequences of
  bytes (where bytes == any object implementing the buffer protocol,
  including bytearray and memoryview)
- Pipe.write accepts an optional argument 'send_handle', which makes it
  behave as the previous write2 function
- uv buffers are allocated on stack, sine uv_write copies them, so we
  also save a malloc there
udp: refactor UDP.send / sendlines

Fold both functions into a single one, which only supports bytes and
sequences of bytes (where bytes == anything implementing the buffer
protocol, that includes bytearray and memoryview)

uv buffers are allocated on stack since uv_udp_send copuies them, so we
save a malloc there
core: fix MSVC's lack of support for C99 variable length arrays