Massive refactor of BindBundleCommand to radically improve code maintainability.

This pull request is probably easier to understand by looking at the resulting code, not the diffs themselves. There is more that can be done to clean up from here, but this is a huge step forward.
The brace is just a block to scope the command object. You want it to go out of scope so it can be GC'd if the CLR wants. That's the most important part (it also allows all the "command" objects to be named "command" which may or may not be a good thing).

Originally I was creating functions for each command and that works well... except when there are multiple outputs or many, many inputs. At some point, I just started "inlining" the command objects to replace huge blocks of binder bundle code. Open to suggestions here.