fix blank ai_canonname from getaddrinfo for non-CNAMEs
dynamically allocate storage for gethostby* buffers

this change shaves ~1k off libc.so bss size, and also avoids hard
errors in the case where the static buffer was not large enough to
hold the result.

this whole framework is really ugly and might should be replaced or at
least heavily overhauled when some changes/factorizations are made to
getaddrinfo internals in the future.