Passing in a PWMOut still works but is deprecated. It will be
removed in CircuitPython 8.0.0
This also switches STM32 timer indices and channel indices to
0-based in our pin data rather than `- 1` everywhere. The latter is
more bug prone.
Most of the way for #3264
Tested on Metro M0, Metro M4, Feather S2, Feather nRF52840, Feather
STM32F4 and Arduino RP2040.
Before, there were two problems:
* Even if a pulsein was never constructed, supervisor_disable_tick
would occur during restart. This could cancel out a supervisor_enable_tick
from someplace else, with unexpected results.
* If two or more pulseins were constructed, each one would enable ticks,
but only the last one deinited (or the reset routine) would disable,
leaving ticks running indefinitely.
In my testing, it seemed that this led to the board sometimes stopping when
it should have auto-reloaded.