Support parsing symbol table in dynamic segment.

Unlike SymbolTableSection, this patch reads from DT_SYMTAB, and
DT_STRTAB in PT_DYNAMIC segment.  It heuristically determines the end of
DT_STRTAB by finding the next higher pointer in the same segment.  GNU
libc (dl-addr.c) assumes that DT_STRTAB comes after DT_SYMTAB.
Don't use standard Python exceptions. Either raise ELFError, or a subclass thereof