The `packs::parser::ruby::packwerk` module exists because there are other ways to parse Ruby code to produce references.

For example, we could have another implementation that keeps track of when classes are defined. This would open us to other possibilities, such as:
- Having `packs` be able to resolve references to gems, both local (by parsing local gems that do not conform to `zeitwerk` expectations) and remote (by parsing `sorbet` `rbi` files generated by `tapioca` and using the file name convention to link them to remote gems)
- We might be able to make AST parsing a bit faster with a simpler implementation.
- Simplify code – the packwerk implementation is complex and simpelr code will be easier to maintain. There's an idiosyncracy in the packwerk implementation that doesn't count the main class/module as a "local definition" and stores it in the cache. This causes unnecessary cycles in both cache de/serialization as well as during reference checking.
- Improve behavior. Packwerk considers a class/module definition as a reference. While monkey patching other classes/modules is not great, that is probably better addressed by a rubocop rule or custom checker.


