protolib_lookup() now uses a dict* instead of a function that returns it

This extra level of indirection was unnecessary and overly-complicated
added hash and equality functions for uint64_t

The hash function is identical to the 32-bit signed int hash function. This
function is unideal for such extended use, but is sufficient for now
We now use known prototypes for all aliased symbols (same address)

Some libraries have multiple names for the same function. Prior to this patch,
it was possible to define a prototype for a symbol, and not have ltrace use it
because it saw a different symbol be called. libc is a common source of this.
For instance (on my amd64 Debian box) it defines the nanosleep symbol as both
'nanosleep' and '__GI___nanosleep', at the same address. If a calling library
calls '__GI___nanosleep', then an ltrace prototype for 'nanosleep' would not be
used, even though it should apply to this call