Optimized Books, especially for lookups.
Use books directly rather than calling getBooks, which creates a copy.
No longer use BookSet internally, but TreeSet instead.
Lookup now uses hash maps for O(1) for initials and name. Still loops for case insensitive, but only once.
Removed getWriteableDrivers. Deprecated unregisterDriver and getMaxLength.
BookFilterIterator now takes an Iterable<Book> rather than a List<Book>.
AbstractBookMetaData now sorts name before initials.