perf(midi): simplify conditions

- merge field requirements into message requirements
- remove negation from condition check
- simplify causes using invalidStatusByte and invalidDataByte
perf(tools/generate): use initializer syntax

- reverts commit c395e167503f4bdba3f5dd2b09ae8f3edc06862c
ci: merge bench with test
BREAKING CHANGE: return value from New
test(tools/generate): rename T to Truncated
perf(tools/generate): use strings.Join to concat
BREAKING CHANGE: rename T to Truncated
test: reset timer after benchmark initialization
refactor(tools/generate): introduce generateFile

- use generateFile to reuse code generation and formatting
- organize the file to make it easy to follow
BREAKING CHANGE: remove truncation from messages
refactor: split generated code into several files
BREAKING CHANGE: generate T() only for .Truncate
refactor: use table driven testing
refactor(tools/generate): reuse vars and cleanup
docs: remove tools/generate from readme
docs: add go modules to readme
refactor: use go workspace
BREAKING CHANGE: split ControlChange into two
refactor: move constants to the top and split vars
BREAKING CHANGE: use ErrInvalid{{ title .Name }}