Extract interfaces for all RevObject implementations

All RevObjects implementations but RevTree were concrete
classes instead of interfaces. This refactoring introduces
interfaces RevCommit, RevFeature, RevFeatureType, and RevTag,
and their default implementations RevCommitImpl, etc., making
the repository object model homogeneously defined by interfaces
instead of a mixin of interfaces and concrete classes, hence
allowing for alternate implementions, as may come from
optimizations of storage backends.