feat(bodies): callback style perform() interfaces

We abstract the body transfer into two two parts: read to send,
and write to receive, so that the existing perform() call can
be interpreted as:

	perform(/* read */ from_data, /* write */ to_content);

With the new interfaces, each part can be substituted by a sgetn/
sputn style callback, individually.  For the read callback, a total
length is required because nearly no Python WSGI server support
HTTP/1.1 chunked encoding, which is required for sending body without
knowing the total length.

A serious bug in test helpers is fixed: get_random_text() now
correctly generates long text instead of sampling on the small
collection of allowed characters.