parsers: give parsers a set amount of space for state

..and don't try to cram all parser states into the
same struct.
add built-time assertions