Introduce stackable IO streams

We currently have gitno for talking over TCP, but this needs to know
about both plaintext and OpenSSL connections and the code has gotten
somewhat messy with ifdefs determining which version of the function
should be called.

In order to clean this up and abstract away the details of sending over
the different types of streams, we can instead use an interface and
stack stream implementations.

We may not be able to use the stackability with all streams, but we
are definitely be able to use the abstraction which is currently spread
between different bits of gitno.
Add an OpenSSL IO stream

This unfortunately isn't as stackable as could be possible, as it
hard-codes the socket stream. This is because the method of using a
custom openssl BIO is not clear, and we do not need this for now. We can
still bring this in if and as we need it.
Port the TCP transport to the new stream API
Port HTTP(S) to the new stream API
ssh: use socket_stream to perform the connection

Having an ssh stream would require extra work for stream capabilities we
don't need anywhere else (oob auth and command execution) so for now
let's move away from the gitno connection to use socket_stream.

We can introduce an ssh stream interface if and as we need it.
gitno: remove code which is no longer needed

Most of the network-facing facilities have been copied to the socket and
openssl streams. No code now uses these functions directly anymore, so
we can now remove them.
stream: constify the write buffer
Fix a couple of compiler warnings
Merge pull request #2678 from libgit2/cmn/io-stream

Introduce stackable IO streams
push: fold unpack_ok() into finish()

The push cannot be successful if we sent a bad packfile. We should
return an error in that case instead of storing it elsewhere.
push: reword comment on finish()

This should make it clearer what the return value implies.