Two main changes:
- avoid 2 additional fork() calls by evaluating \j instead of using
$(jobs | wc -l) -> one fork for subshell and another for `wc`.
- make the build up of the prompt a bit more modular by using an
array to collect the pieces and "sort of" join them in the end.
Avoiding starting many processes during creation of the PS1 string makes
the shell much more responsive, especially under Cygwin, which has
problems with fork().