Open the socket stream in append mode

The buffering code does funny things when it assumes that we're writing
and reading from the same position.
Implement ADDRESS command

To implement the ADDRESS command, it's first needed to write the code
that parses strings and literals.
Fix the SYMBOL response in the documentation

The response also includes the (hexadecimal) size.
Improve the error message if no symol is found

The two no's in 'TAG NO No symbol found' looked silly.
cleanup: use a separate function to grow the buffer
cleanup: use shared conn buffer in send_untagged

This gets rid of one potentially unnecessary allocation.
Include the module name in a SYMBOL response

Note that get_syment_module() also serves to check whether or not
the syment is valid.
Change the allocation strategy for read_astring

Since read_atom may return a string that is not NUL-terminated, the
whole allocation scheme is flawed and users of read_astring() must make
a private copy if they want to add the NUL character.
Return all symbols with a given name for ADDRESS
Swap ADDRESS and SYMBOL commands

The initial idea was that ADDRESS means "get the address of" and
SYMBOL means "find the symbol for". However, theis counter-intuitive,
because we end up with ADDRESS being followed by a symbol name and
SYMBOL being followed by an address.

Doing it the other way round simply looks better.