Pass the visitor to the `transform` methods…

… it enables such syntax: `(1, 2, f(3, 4), 5)`.
Support array access in the disassembler.
Merge the `transform` method in the visitor.

It should be done like this at the beginning. For historical reason, we
needed a `transform` and `getValue` method on bags, but it is no longer
needed now. It's much cleaner and easier to understand now.