[refactor] [test] add Controller and ActionInterface; add ActionResolverCollection for storing and prioritising action resolvers; make Dispatcher::resolveAction() and Dispatcher::executeAction() public to improve testability