Fix bug: PID_autotune() could set heater PWM value over PID_MAX

The bug was caused by a negative value of d (separation) in case PID_MAX < 20.
Avoid overheating in PID_autotune() with a fast heater

PID_autotune() stops with overheating error when heating rate is high.
Old behavior: Heat/cool until we reach target temp., but not sooner than
after 5 sec. If we get over temp+20, throw an error and stop.
New behavior: Let `limit' = 5 sec. Heat until we reach target temp
in > `limit' sec or we reach temp+15. In the latter case change `limit'
to the elapsed time. Cool until we reach temp, but not sooner than
after `limit' sec. If we get over temp+20, throw an error and stop.
Heater controller: avoid stucking at target temp. minus PID_FUNCTIONAL_RANGE

... through better initialization if I state in heater PID controller

Old behavior: always init I state with 0. This caused a threshold drop
in heating as temp. crosses target temp. minus PID_FUNCTIONAL_RANGE.
This may cause heater stuck at that temperature if heater response
is fast enough.
New behavior: initialize I state so that there is no discontinuity in
heating as a function of time -- if it is allowed by I term limits.
Allow asymmetric PID_FUNCTIONAL_RANGE

If PID_FUNCTIONAL_RANGE_{UP,DOWN} are defined (either one), use them
as the top and bottom limits of PID functional range. If undefined,
default to PID_FUNCTIONAL_RANGE.
Current config.: coordinates, resolutions, heating