find objects in the dbx file

just find addresses of things that look like the start of objects, don't
try to use tree segments, indexes, message info objects, etc
cleanup

move comment to docstring
use with statement
use newer str.format instead of % string specifier
read messages from dbx file
generalize message segment traversing

traversal function map_segments takes a function to get body of
  segments, just their address, or whatever else
find starting addresses of all messages

find_messages -- visit each message_segment, starting segments are those
              that weren't the successor of some other segment in the
              linked lists the segments form

bugfixes:
   track file length and add checks to ensure next_object, next_message,
   find_messages, etc don't loop forever after exceeding file length
   make is_last() method check whether next_addr == 0
   (instead of msg_len < 512)