Fixes #7301 - infrastructure for bulk actions via dynflow

Usage:

    plan_action(::Actions::BulkAction, ActionToTriggerPerTarget, targets,
*args)

This will plan the ActionToTriggerPerTarget on every target from the targets.
By default, it uses the targets class and the id of the targets for
serializing the data into the input and loading the objects back in the run
phase. The *args are also passed as arguments to the ActionToTriggerPerTarget.

To customize the logic around serialization/deserialization of the input
targets and args, one can override the `plan` and
`create_sub_plans` method.