Improve dangerous/undefined PID expansion behavior

*Backstory*

In Bash, % means something like 'last job backgrounded'. In upstream Fish, it means either "all backgrounded jobs" or "all processes owned by your user" if there are no processes backgrounded.

I usually run `kill -9 %` in Fish if I actually wanted to hard kill the last job backgrounded (useful if it wasn't responding). This actually matched for *all* jobs backgrounded, but I never noticed until today.

Even further, it turns out `kill -9 %` in Fish kills *all processes owned by your user* if you ever accidentally run it without backgrounding something first.

Go ahead, `echo %` to get a feel for how it works right now.

----

*Change 1*

Use Bash-like expansion for empty searches (when you just use a '%' by
itself).

'%' will now *only* match the last valid backgrounded process.
If there are no such processes, an expansion error will be generated.

'%' by itself would previously match either *all* backgrounded
processes, or failing that, all processes owned by your user. If you
ever tried to run `kill -9 %`, it would either kill all backgrounded
processes or *all* of your processes. I'm not sure why anyone would ever
want that to be a single keystroke away. You could almost typo it.

As a result of this change, `fg %`, `bg %`, `kill %`, etc will all now operate
on the last process touched by job control (or throw an expansion error).

----

*Change 2*

Don't run 'by-name' matches when the search term is numeric.

This prevents you from running a command like `kill %1` and accidentally
killing a process named something like "1Command". Overloaded behavior
can be dangerous, and we probably shouldn't play fast and loose with
expansion characters that generate process IDs.