Module combination is not commutative (order matters)

When combining multiple modules in order to make another module, order matters.

The last module appended that provides a dependency named 'X' will override any
previous definition of that dependency named 'X'.

The idea is that this makes it easy to swap out behaviour in bulk or provide
a mock version of a dependency for specs.