Variadic templates support for actions

This PR introduces variadic templates support for actions, including a number of refactions and simplifications to make it possible.

- The basic `action` was renamed to `basic_action`, and takes a function signature instead of a result and a tuple of arguments.
- Actions returning void and actions returning a result were unified (`plain_action/plain_result_action` -> `plain_action`).
- Plain actions and component actions were unified (`plain_action` -> `action`).