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.
do we want to cache using Suppliers#memoize