Event-based reader

I'm not very familiar with C++, so i have no idea if this is a good way to do it.
It works like this:
```
PacketReader parser;
parser.on<AbilityLevel>([] (const AbilityLevel& level) { ... });
parser.on<ExpGain>([] (const ExpGain& exp) { ... });
parser.read(some_block);
```