Support custom schema-based checks for specific publication types

This PR implements a mechanism to:
 * identify top-level publication types (i.e. `dc:type` in OPF) early-on
 * be able to access publication types from `OPFData`, and also from content checkers
 * allow checkers to validate against a list of schema, which can be initialized based on the publication type

Details of changes are listed in commit messages, but essentially:
 * `OPFData` is now an immutable data object, parsed in a new  `OPFPeeker` (replacing `VersionRetriever`)
 * `OPFData` and `OCFData` are memoized and can be now be queried multiple times without extra parsing
 * The set of publication types (`Set<String>`) is now passed to content checkers via the `ContentCheckerFactory` factory interface.
 * When initializing `XMLValidators` in their init method, content checkers can create any number of validators, e.g. based on the publication type