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 homogeneusly defined by interfaces
insteda of a mixin of interfaces and concrete classes, hence
allowing for alternate implementions as may come from
optimizations of storage backends.