Reduce memory usage by not preallocating string buffers

Allocate them on the coroutine stack and only initialize them when the
request is about to be processed. This should also improve locality a
little bit, although preliminar benchmarks were inconclusive.

Additional optimizations that could be performed are:
 - not calling grow_buffer_if_needed() on strbuf_init(): sometimes a
   strbuf serves only as a pointer holder (STATIC cases)
 - inline string if it's smaller than some threshold value
   (which could be "sizeof(char *) + 2 * sizeof(size_t) - 1" if
   instead of "used size" we had "remaining length": this way
   the 0 value could act as a NUL byte, allowing for one extra
   inline character