Refactored components to lazily initialize builders/middlewares

This is to allow component privatization possible.