Flatten concatenation

Flattening concatenation is important for #31, because array concatenation is associative, while cons is not. (It’s also valuable for other reasons, but that’s the immediate takeaway.)

- [x] `S -> a b c` → `[a, b, c]` — concatenation should, trivially, produce an array
- [x] `S -> a*` → `[…]` or `[a, …]` — repetition should likewise produce an array; it actually produces derivatives via concatenation
- ~~`S -> a S | b` → `[a, [a, [b]]]` — this is recursive and so should be a recursive structure~~ For the time being, employ a reduction to preserve structure.