Separate command from args in function signature

Keeping them separate allows us to reason about the command separately
from the arguments. It also allows us to avoid asserting that a command
exists, since the function requires it, though it does give a loophole
that falsey commands could be given (None, False, and '', for example).
Make inve default command a shell

Which shell is platform-specific. If on windows, it will open a new
powershell. Otherwise, it is based on the 'SHELL' environment variable.

The logic for choosing a shell is still needed in the shell() function
for now because the shell_check uses it. However, it's not needed on
windows, because the check doesn't happen there.

If the shell to run is chosen automatically (the default), then write
the message notifying the user that a subshell is being entered.
Allow more options to be called with shell

The inve function passes any additional keyword arguments that it
gets to be passed on to check_call. Let shell do that as well.
Check for path errors in inve

The primary difference between inve and shell is that shell checks
for errors on the PATH, and warns for them. Making inve handle that
check, and making it more polymorphic, sounds like a good idea.

the shell function still exists for backward compatibility.