read in >1 byte chunks, and set a useful timeout on select()

this way, we're not rolling this loop over nearly as much, while still
preserving the overall timeout semantics
Changelog re #413, closes #454
Merge branch '1.13' into 1.14
Merge branch '1.14' into 1.15

Conflicts:
	sites/www/changelog.rst