Implement keyword argument passing... (foo-func 1 2 :kw1 "bar") works!

This code is heavily, *heavily* based off of Guillermo Vaya
(willyfrog)'s work (#295) ... instead of defining its own keyword arg though, it
uses the "standard" :kwarg type, which is the main difference from
willyfrog's original branch.
@agentultra I've been thinking about how to do this.  There seem to be a few options:

1. Leave it as it is.
2. Replace with two separate functions, one that pulls out keywords and one that doesn't.
3. Keep it in one function, and make it so that with_kwargs returns 3 things, whereas when that's set to False, it returns 2.  This requires modifying less calls outside the function.
4. Switch the order of line 449 so it instead checks `with_kwargs` before it checks `isinstance`, which is probably faster if performance is the main concern.  Checking a boolean is probably fast enough.  In fact, this change is so easy I just made it in commit e852e9f!
5. Simply add a nested "if" clause, but this doesn't make the code look any cleaner.

Thoughts?  None of these options feels "super clean" to me, but none of them seem so bad either.