refactor(resolve) separate argument marshalling from the operation

@mappum see how the unpacking of arguments happens separately from the
resolve loop?

It's a bit more verbose, but much clearer.

However, doing two different things in one loop is less clear than doing
them separately.

It also causes problems for further refactoring as it introduces temps
that get in the way of further refactorings.

Plus, there will be 50+ commands, so it's important that we stay
framework agnostic as much as possible.

So, this is the style we prefer. It'll keep us nimble in the long run.