Not sure about these generics. The T passed in could be an implementation type, but then that is used as though it is the interface type. For example, if I do:
`builder(TestApplicationImpl.class)` then will it give me back a `Builder<TestApplicationImpl>` rather than a `Builder<StartableApplication>`?