Bash launcher refactor

This is the beginnings of a refactoring for the bash launcher.  I intend to modernize it and fix the following bug.

Currently the JRUBY_OPTS and option parsing code requires options that affect some kinds of code to be earlier in the option list than other kinds.  For example:

```
JRUBY_OPTS="--profile.html --profile.out test.html --sample" bin/jruby test.rb
```
this returns: jruby: unknown option --sample

```
bin/jruby --profile.html --profile.out test.html --sample test.rb
```
as does this.

This means that some options cannot currently be specified in JRUBY_OPTS if it is at all possible that anything launched with JRUBY_OPTS set may use some other options.

This rewrite is still in progress, I'm sending the pull request in case I end up not having time to finish it.
Similar to BASH array +=() operator there is a += operator for strings in BASH, eg.

a="1 2"
a+=" 3"
echo $a
1 2 3

So this could be 
JAVA_OPTS+=" -XX:......"

You could also consider aggregating the opts within an array until the time you use them at which point you can flatten the array into a single string via "${JAVA_OPTS[*]}" or a quoted element space separated string such as "${JAVA_OPTS[@]}"