Also simplifies the code by removing the specialised (and inefficient) cooked functions from UART and USB_VCP.
This is to keep the top-level directory clean, to make it clear what is core and what is a port, and to allow the repository to grow with new ports in a sustainable way.