Add `splice_utils` module

This module mainly provides a `splice_socket_to_socket` function which
does what its name suggests.

This will be used further on to implement zero-copy data transfer from
backing `sproxyd` HTTP connections to frontend `swift-proxy` sockets.
Add a 'somewhat buffered' HTTP client

In order to zero-copy data from one HTTP connection to some other
socket, we first need to read the HTTP headers from the socket, then get
access to the payload data.

Using non-buffered IO (resulting in `read`s of length 1) introduces
quite some syscall overhead (at least one for every character in the
headers).

Using buffered IO has the drawback some of the payload data can end up
in the buffer, without the possibility to retrieve it later.

This commit introduces a 'somewhat buffered' HTTP connection, which uses
buffered IO, but provides access to the internal buffer, and adds some
invariant constraints (and checks for them) for calls that occur after
the buffer has been read.
Implement zero-copy support in `DiskfileReader`

Swift has basic support for zero-copy IO in the full object retrieval
code path.

This commit adds (configurable) support for this, using the `splice`
syscall to transmit data from a backing HTTP connection to `sproxyd`
towards a front-end `swift-proxy` connection.

2 benefits: better throughput, and less CPU usage per connection, so
more throughput when spanning over multiple connections.

Some completely unscientific numbers (Swift & RING running in VMs, 128MB
object):

Without `splice`:

```
$ for i in `seq 1 20`; do swift download testing 128M; done
128M [auth 0.193s, headers 0.593s, total 1.318s, 119.395 MB/s]
128M [auth 0.191s, headers 0.437s, total 1.335s, 117.347 MB/s]
128M [auth 0.162s, headers 0.407s, total 1.175s, 132.514 MB/s]
128M [auth 0.171s, headers 0.430s, total 1.303s, 118.625 MB/s]
128M [auth 0.164s, headers 0.426s, total 1.190s, 130.750 MB/s]
128M [auth 0.187s, headers 0.440s, total 1.194s, 133.355 MB/s]
128M [auth 0.171s, headers 0.434s, total 1.215s, 128.572 MB/s]
128M [auth 0.181s, headers 0.450s, total 1.271s, 123.144 MB/s]
128M [auth 0.172s, headers 0.408s, total 1.315s, 117.486 MB/s]
128M [auth 0.167s, headers 0.382s, total 1.219s, 127.526 MB/s]
128M [auth 0.181s, headers 0.421s, total 1.254s, 125.074 MB/s]
128M [auth 0.177s, headers 0.423s, total 1.173s, 134.765 MB/s]
128M [auth 0.193s, headers 0.492s, total 1.196s, 133.795 MB/s]
128M [auth 0.202s, headers 0.464s, total 1.310s, 121.195 MB/s]
128M [auth 0.168s, headers 0.544s, total 1.281s, 120.598 MB/s]
128M [auth 0.170s, headers 0.446s, total 1.302s, 118.547 MB/s]
128M [auth 0.163s, headers 0.419s, total 1.111s, 141.657 MB/s]
128M [auth 0.168s, headers 0.440s, total 1.323s, 116.195 MB/s]
128M [auth 0.160s, headers 0.412s, total 1.174s, 132.366 MB/s]
128M [auth 0.166s, headers 0.420s, total 1.266s, 122.045 MB/s]
```

Using `splice`:

```
$ for i in `seq 1 20`; do swift download testing 128M; done
128M [auth 0.165s, headers 0.514s, total 1.154s, 135.751 MB/s]
128M [auth 0.161s, headers 0.403s, total 1.025s, 155.484 MB/s]
128M [auth 0.209s, headers 0.473s, total 1.031s, 163.219 MB/s]
128M [auth 0.188s, headers 0.506s, total 1.203s, 132.231 MB/s]
128M [auth 0.185s, headers 0.476s, total 1.186s, 133.994 MB/s]
128M [auth 0.180s, headers 0.549s, total 1.284s, 121.618 MB/s]
128M [auth 0.164s, headers 0.426s, total 1.068s, 148.417 MB/s]
128M [auth 0.216s, headers 0.579s, total 1.216s, 134.293 MB/s]
128M [auth 0.198s, headers 0.461s, total 1.008s, 165.718 MB/s]
128M [auth 0.170s, headers 0.411s, total 1.068s, 149.526 MB/s]
128M [auth 0.170s, headers 0.494s, total 1.131s, 139.728 MB/s]
128M [auth 0.179s, headers 0.432s, total 1.081s, 148.786 MB/s]
128M [auth 0.207s, headers 0.546s, total 1.378s, 114.566 MB/s]
128M [auth 0.168s, headers 0.439s, total 1.168s, 134.186 MB/s]
128M [auth 0.162s, headers 0.408s, total 1.036s, 153.662 MB/s]
128M [auth 0.185s, headers 0.428s, total 1.123s, 143.089 MB/s]
128M [auth 0.164s, headers 0.422s, total 1.059s, 149.994 MB/s]
128M [auth 0.185s, headers 0.441s, total 1.160s, 137.688 MB/s]
128M [auth 0.165s, headers 0.482s, total 1.075s, 147.596 MB/s]
128M [auth 0.165s, headers 0.416s, total 1.162s, 134.653 MB/s]
```

Next to the moderate throughput impact, there was a clearly visible CPU
usage difference of the `swift-object-server` processes in `top`, going
from 30-50% to 10% and less.