- Start adding support for specifying bit length of fields
- Change to a reflective way of serialization
- Separate runtime components into their own package
- Use code formatter to beautify code instead of hardcoded whitespace
- Decouple tree parser and generator logic
- Use Xtend template methods for easier to read code generation
- Do not rely on unconventional toString()
- Chunk down generation to variable definition, getter and setter
- Generate code in more conventional order
- Support organizing protocols into packages
- Factor out application from parser logic
- Handle byte length of fields during generation
- Reconsider typing
- Generate range check for numeric fields
- Length check for strings
- For now the byte length of long is a limitation
- Initial support for unbounded string and byte array fields
- They can only be used as last field and only one can be used
  in a single protocol
- Integers cannot be unbounded
- Add validation logic for these restrictions
- Enforce some restrictions in the grammar as well
- Clean up
- Generate proper sanity check for string and binary fields
- Implement string and byte array serialization
- Break down parser rules; this makes the parse tree and the listener
  more complex but the grammar more readable