[RFC] mch_call_shell refactor

To reimplement the horrible `mch_call_shell` function on top of libuv, I need to refactor it first. This PR will do that