Implement a packet parser which tracks the finger state.

The parser seems to be mostly complete, at least I cannot trigger any
unknown packets here.