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.