Use proper decoding instead of ByteList.toString.
Actually use dotted format, not specdoc format.
Decode #send symbols the same way as regular symbols.

Symbols must be decoded using raw bytes, so that we can match
MRI logic. In MRI, symbols are unique to their raw bytes rather
than their logic character content, which allows differently-
encoded Strings to map to different Symbol objects, and those
Symbol objects can preserve their original encoding.

decoding of the bytes, which caused multibyte strings to map to
a different Symbol object via send than via other mechanisms like
String#to_sym or parsing. I attempted to make all Symbols decode
properly, but this breaks the above-mentioned MRI compatibility.

This change modifies all #send paths to decode incoming strings
the same way as symbols in the rest of the system, so they will
dispatch to the same-encoded symbolic name.

Note: This does mean that multi-byte identifiers throughout the
system are often represented as their raw byte form rather than
their proper encoded form, and the resulting Java String will
sometimes be unintelligible. Until we can find a way to support
real decoded symbols and maintain compatibility with MRI's raw
byte representation of symbols, we can do nothing to prevent this.

Fixes #736 and potentially other symbol-related issues.
More robust detection of near-max array size.

I'm using Unsafe.arrayBaseOffset to indicate how many extra bytes
a byte[] will need. Integer.MAX_VALUE - that size should be the
maximum number of bytes such an array can hold without exceeding
32-bit maximum.
Shallow dup the incoming bytelist, since we only modify begin.
Reduce object overhead for dregexp.

* Share a single Encoding[] for the fixedEnc out param
* Add a "light" path to element preprocessing, since the bytelist
  produced was not used.

See #302.

Performance improves as follows:

Before:

```
                                               user     system      total        real
1m x10 /abcd#{foo}ijkl/                    5.500000   0.150000   5.650000 (  2.164000)
1m x10 /abcd#{foo}ijkl/u                   1.850000   0.010000   1.860000 (  1.429000)
1m x10 /abcd#{foo}ijkl/o                   0.730000   0.010000   0.740000 (  0.402000)
                                               user     system      total        real
1m x10 /abcd#{foo}ijkl/                    1.180000   0.000000   1.180000 (  1.176000)
1m x10 /abcd#{foo}ijkl/u                   1.160000   0.010000   1.170000 (  1.092000)
1m x10 /abcd#{foo}ijkl/o                   0.100000   0.000000   0.100000 (  0.107000)
                                               user     system      total        real
1m x10 /abcd#{foo}ijkl/                    0.910000   0.000000   0.910000 (  0.902000)
1m x10 /abcd#{foo}ijkl/u                   0.930000   0.020000   0.950000 (  0.927000)
1m x10 /abcd#{foo}ijkl/o                   0.110000   0.000000   0.110000 (  0.108000)
```

After:

```
                                               user     system      total        real
1m x10 /abcd#{foo}ijkl/                    2.680000   0.090000   2.770000 (  1.431000)
1m x10 /abcd#{foo}ijkl/u                   1.360000   0.010000   1.370000 (  1.081000)
1m x10 /abcd#{foo}ijkl/o                   0.490000   0.000000   0.490000 (  0.275000)
                                               user     system      total        real
1m x10 /abcd#{foo}ijkl/                    0.830000   0.000000   0.830000 (  0.826000)
1m x10 /abcd#{foo}ijkl/u                   0.860000   0.010000   0.870000 (  0.850000)
1m x10 /abcd#{foo}ijkl/o                   0.120000   0.000000   0.120000 (  0.117000)
                                               user     system      total        real
1m x10 /abcd#{foo}ijkl/                    0.840000   0.000000   0.840000 (  0.824000)
1m x10 /abcd#{foo}ijkl/u                   0.860000   0.010000   0.870000 (  0.847000)
1m x10 /abcd#{foo}ijkl/o                   0.100000   0.000000   0.100000 (  0.107000)
```
Add a shutdown hook for the command-line JRuby, to tear down.

We did not run teardown if the JVM was forcibly stopped using
ctrl-C, which in some cases could cause streams to remain
unflushed and other resources to be left dangling. However, we
don't want to set a shutdown hook if we're one of many JRuby
instances in a given JVM. This commit adds a shutdown hook only
if we're the top-level command-line JRuby (indicated by the
"hard exit" config flag) to run teardown at forced exit.