Improve packet

Why? With changing requirements, I need some sanity for how to handle the different types of packets.

TODO
- [x] add tests for each type of packet
- [x] separate into multiple classes with proper OOP principles (simple > complex above all else though)
- [ ] get working with frame_consumers