This change addresses JENKINS-25096.

## Problem
When Jenkins submits certain types of form elements, such as BuildWrapper or JobProperties, it does so in a way that each kind is unique.

The way it does this is by submitting such elements with the type (digested) as the KEY in that level of the map, e.g.
   "com-example-Foo": { ... }

The digestion that occurs here inhibits our ability to translate these as "!by-name My foo: { ... }".

## Solution

I thought about solving this by introducing "!key-by-name", which just did the right thing for "!by-name", however, this blocks @YamlTag from doing the right thing on annotated classes.

Instead, I introduced a new YamlTransformProvider, which walks all of the other providers composing a new transform with them to create: "!key:{old tag}".

So now, you can specify "!key:by-name My foo", but also "!key:foo" with no additional annotation.
This is copied from DisplayName.  The idea is that when translating JsonToYaml, the first provider registered (highest number) wins the right to translate the class name.

"fallback" is intended to tersely indicate that this is a last ditch effort to avoid class names.