Support bit-level matching

As the title says, adds real support for grammars like
```
:components:
init: bit{3} := b110
data_len: bit{5}
some_byte: byte
data := len\data_len:some_byte{len}

root := init:data:0x02:eof
```

This matches the example file of
`C6 01 01 01  01 01 01 02`

Also restructures how sizes are expressed to make that consistent.