refactors route.go to use more interfaces
adds ControllerNotFoundError which returns the proper HTTP status code
implements template inheritance