feat(job/unit): substitute specifiers in Job requirements

This reworks the template/instance logic and adds specifier substitution
when parsing the Requirements for a Job.
Instead of an InstanceUnit, we switch to a UnitNameInfo model which
encapsulates information that can be derived from a unit's Name (namely,
the %n %N %i %p specifiers).

Also includes documentation for end users.