RFC: Fan* refactoring

As a continuation of RFC: Heaters/temperature_* refactoring.

There are now several fan objects, which sometimes lack something, for example:

There is now a recent support of display_templates with makes things even more complicated.

Basically, all fans are just: fan + controller, without exception.
The only fan that I do not like to touch is the default [fan] because of the legacy and risk of misconfiguration and breakage of everything.

So, basically, one should be able to define a typical machine as:

[fan] # Old definition for all the legacy
...

[display_template heatbreak]
param_target: 50
text:
    {% set heater_temp = printer["extruder"].temperature %}
    {(heater_temp - param_target)}

[fan heatbreak]
# To validate it upon initialization and avoid use of delayed_gcode hacks
control: display_template heatbreak

[fan aux]
control: manual # SET_FAN...
...

Basically, instead of defining several custom controllers, replace them with template examples.
That is it.
If something is hard to do with templates, for example controller_fan, one can simply define the list of appropriate objects in the API, we already have heaters and steppers, so it should not be so hard.

It is possible, though, to simply load the controller within the fan object, but to my understanding, the only reason for this is the PID controller, which seems to me not so good or important in practice.

Probably it is also worth considering to do something with the display_templates naming in this context, basically they are output_pin templates, think I.

Thanks,
-Timofey

P.S.
Probably we can leave the fan_generic, instead of using [fan ...] to make it compatible with the existing API/UI control.