MarshallingDirectives, FormFieldDirectives, and more

It may not readily show but this PR has been keeping me busy for far too long.
Due to numerous interdependencies it addresses 3 tickets at the same time: #15927, #15923 and #16190.

I'm glad to finally get this beast of my table! :)
Yes, we could.
We could change `forContentTypes` to take a seq of `ContentType` rather than a seq of `ContentTypeRange`, which would probably be good enough.
I like it. Will give it a go.
Thanks for the suggestion!