BaseRepositoryBuilder is type parameterized by the the type of repository it creates, and the type of the builder itself, to implement all of the chaining methods.  Because of these two type parameters its a horrible thing to use in application level code.

This class exists to define those type parameters with sane defaults, and prevent application code from needing to care.  But FileRepositoryBuilder wants different values for the same type parameters, but still wants roughly the same logic.  So we throw all of that up in BaseRepositoryBuilder.