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)
```