Handle externally controlled GPIO pins more generically, by removing all CYW43-specific code from `machine_pin.c`, and adding hooks to initialise, configure, read and write external pins. This allows any driver for an on-board module which controls GPIO pins (such as CYW43 or NINA), to provide its own implementation of those hooks and work seamlessly with `machine_pin.c`.