So, when I was writing this I thought about doing that, but I feel like I have good reasons for why to only pass these through. Let me explain why for each Popen argument and see what you guys think:

- args: passed
- bufsize=0: I do not want the user to set this because it interferes with the output capture behavior
- executable=None: Not really useful since it can only differ from the args on Unix
- stdin=None: I am controlling this
- stdout=None: I am controlling this
- stderr=None: I am controlling this
- preexec_fn=None: This only works on Unix and is uncommonly used
- close_fds=False: Only works on Unix and would interfere with my pty stuff
- shell=False: passed
- cwd=None: passed
- env=None: passed
- universal_newlines=False: not supported on all Python's (depends on build flags) and pretty uncommon, I would consider adding this
- startupinfo=None: Windows only, not commonly used
- creationflags=0: Windows only, not commonly used

So that's how I ended up at the list I have. I would not want to allow arbitrary kwargs to pass through since some of them could really mess things up, but I would be open to adding some of the missing ones which make sense.