Implement a "seen packets" table to track packets that have already been processed by the serial bridge.
This prevents packets from being re-transmitted over the serial link if they have already been seen, and it stops inbound packets from serial from being re-injected into the mesh if they are duplicates.
Duplicate inbound packets are now freed to prevent memory leaks.
This commit refactors the serial bridge functionality out of the `simple_repeater` example and into a more reusable, object-oriented structure.
An `AbstractBridge` interface has been introduced, along with a concrete `SerialBridge` implementation. This encapsulates all the logic for packet framing, checksum calculation, and serial communication, cleaning up the main example file significantly.
The `simple_repeater` example now instantiates and uses the `SerialBridge` class, resulting in better separation of concerns and improved code organization.