Simplify logic a bit. Ensure data buffer is properly aligned,
especially for platforms where unaligned access is not allowed. Make
it possible to override the small buffer size.

A simple continuous read string test using libusb showed a reduction
in CPU usage from roughly 10% to less than 1% using a dual-core GHz
CPU, when the malloc() operation was skipped for small buffers.

MFC after:	2 weeks


git-svn-id: svn+ssh://svn.freebsd.org/base/head@274088 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f