Improve packet

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