How do communication protocols like I2C, SPI, and UART differ in terms of speed, bus topology, and complexity?