Fixed issue #511: bookmarks breaks when upgrading from version 1.1.4 to 1.2.0.

Included in this commit related to issue #511:
 - General cleanup of bookmark handling code:
    - Created Bookmark class
    - Moved serialization and deserialization to dodp protocol code.
    - Using SMIL offsets in Bookmarks and all public URLs.
 - More robust sorting of bookmarks.
 - Added more inline documentation in places where the code gets complicated.
 - Added a few TODOs.
 - Improved logging.
 - Several important changes to the Segment class:
   - Segments are no longer uniqely identified by their url() method.
   - A new bookmark method that will construct a bookmark at a given offset.
   - A few utility methods for SMIL and audio offset handling.
 - Fixed a number of playback related bugs that occurred when navigating in
   complex books.
 - load() on Player now expects a SMIL offset - not audio offset.
 - The stack player now correctly handles multiple segments with the same url().

Included in this commit related to issue #275:
 - Playlist has a new method named searchSections that can search all sections
   in a book for something defined by a callback function.
 - Changed segmentByAudioOffset to search in the whole book.
   Note that this will result in a considerable performance hit on large books
   if the search has to iterate through the whole book.
 - Fixed timeline navigation in complex books.
   Clicking any place on the timeline should work now, as long as the point
   in the audio file is contained by an existing segment.
   Clicking a point that isn't in any existing segment should fail gracefully.

Included in this commit not related to any issues:
 - Hide advanced settings on settings page when not in development mode.