server handling: replace fd_map with fd_table hash table [#7]

The fd_map implementation was rather complex and was incorrectly allocating
too large arrays as well as being inefficient when the process holds
hundreds of thousands of sockets.  Replace it with a simple hash table.
name resolution: try numeric addresses first

We'll first see if the address is numeric to avoid all the resolution
overhead of a regular lookup which happens even if the caller supplied a
numeric host and service and then fall back to AI_ADDRCONFIG lookup if that
fails.