Elides the need to allocate an AkkaForkJoinTask for Mailbox-submission to...

... registerForExecution

by having Mailbox extend ForkJoinTask and using the fact that `ForkJoinTask.exec` when returning
`false` does not set completion on the task, so it is free to be resubmitted to the `ForkJoinPool`
without reinitialization.

Also adds the ability to use `fork()` when the currentThread is a worker thread of the pool that we want to execute on.

Adds a JMH benchmark for both the ping-pong performance and pipelined throughput.

TL;DR: Don't be lazy, read the results.

Results:

From scratch:

[info] Result: 1603430.459 ?(99.9%) 94349.816 ops/s [Average]
[info]   Statistics: (min, avg, max) = (1401177.409, 1603430.459, 1763150.680), stdev = 108653.388
[info]   Confidence interval (99.9%): [1509080.643, 1697780.275]
[info]
[info]
[info] # Run complete. Total time: 00:05:19
[info]
[info] Benchmark                              (threads)  (tpt)   Mode  Samples        Score  Score error  Units
[info] a.a.ForkJoinActorBenchmark.pingPong            1      1  thrpt       20  2187447.027    34966.206  ops/s
[info] a.a.ForkJoinActorBenchmark.pingPong            1      5  thrpt       20  2204127.207    27808.262  ops/s
[info] a.a.ForkJoinActorBenchmark.pingPong            4      1  thrpt       20  1542096.697   112122.859  ops/s
[info] a.a.ForkJoinActorBenchmark.pingPong            4      5  thrpt       20  1603430.459    94349.816  ops/s

[info] Result: 4010431.485 ?(99.9%) 241994.001 ops/s [Average]
[info]   Statistics: (min, avg, max) = (3499979.000, 4010431.485, 4384807.317), stdev = 278680.651
[info]   Confidence interval (99.9%): [3768437.484, 4252425.486]
[info]
[info]
[info] # Run complete. Total time: 00:05:12
[info]
[info] Benchmark                               (threads)  (tpt)   Mode  Samples        Score  Score error  Units
[info] a.a.ForkJoinActorBenchmark.floodPipe            1      1  thrpt       20  3813536.918    60702.120  ops/s
[info] a.a.ForkJoinActorBenchmark.floodPipe            1      5  thrpt       20  6281274.681    69758.812  ops/s
[info] a.a.ForkJoinActorBenchmark.floodPipe            4      1  thrpt       20  1872842.900   133720.780  ops/s
[info] a.a.ForkJoinActorBenchmark.floodPipe            4      5  thrpt       20  4010431.485   241994.001  ops/s
[success] Total time: 324 s, completed Oct 28, 2014 11:17:29 PM

Without fork():

[info] Result: 1543223.138 ?(99.9%) 97371.879 ops/s [Average]
[info]   Statistics: (min, avg, max) = (1365742.400, 1543223.138, 1706120.708), stdev = 112133.601
[info]   Confidence interval (99.9%): [1445851.259, 1640595.017]
[info]
[info]
[info] # Run complete. Total time: 00:05:20
[info]
[info] Benchmark                              (threads)  (tpt)   Mode  Samples        Score  Score error  Units
[info] a.a.ForkJoinActorBenchmark.pingPong            1      1  thrpt       20  2308577.697    45729.400  ops/s
[info] a.a.ForkJoinActorBenchmark.pingPong            1      5  thrpt       20  2328201.214    46027.004  ops/s
[info] a.a.ForkJoinActorBenchmark.pingPong            4      1  thrpt       20  1643865.269   103346.970  ops/s
[info] a.a.ForkJoinActorBenchmark.pingPong            4      5  thrpt       20  1543223.138    97371.879  ops/s
[success] Total time: 337 s, completed Oct 28, 2014 10:08:22 PM

[info] Result: 3909202.021 ?(99.9%) 239246.494 ops/s [Average]
[info]   Statistics: (min, avg, max) = (3412431.955, 3909202.021, 4253112.542), stdev = 275516.618
[info]   Confidence interval (99.9%): [3669955.528, 4148448.515]
[info]
[info]
[info] # Run complete. Total time: 00:05:14
[info]
[info] Benchmark                               (threads)  (tpt)   Mode  Samples        Score  Score error  Units
[info] a.a.ForkJoinActorBenchmark.floodPipe            1      1  thrpt       20  4055351.297    58690.834  ops/s
[info] a.a.ForkJoinActorBenchmark.floodPipe            1      5  thrpt       20  6443241.874    85212.123  ops/s
[info] a.a.ForkJoinActorBenchmark.floodPipe            4      1  thrpt       20  1955466.592   146982.629  ops/s
[info] a.a.ForkJoinActorBenchmark.floodPipe            4      5  thrpt       20  3909202.021   239246.494  ops/s
[success] Total time: 327 s, completed Oct 28, 2014 11:09:47 PM

With fork():

[info] Result: 2107459.115 ?(99.9%) 135750.870 ops/s [Average]
[info]   Statistics: (min, avg, max) = (1708405.140, 2107459.115, 2371601.093), stdev = 156330.904
[info]   Confidence interval (99.9%): [1971708.244, 2243209.985]
[info]
[info]
[info] # Run complete. Total time: 00:05:17
[info]
[info] Benchmark                              (threads)  (tpt)   Mode  Samples        Score  Score error  Units
[info] a.a.ForkJoinActorBenchmark.pingPong            1      1  thrpt       20  2545330.600    32655.057  ops/s
[info] a.a.ForkJoinActorBenchmark.pingPong            1      5  thrpt       20  2548132.768    44437.497  ops/s
[info] a.a.ForkJoinActorBenchmark.pingPong            4      1  thrpt       20  2224621.733   137324.670  ops/s
[info] a.a.ForkJoinActorBenchmark.pingPong            4      5  thrpt       20  2107459.115   135750.870  ops/s

[info] Result: 5433858.207 ?(99.9%) 278061.661 ops/s [Average]
[info]   Statistics: (min, avg, max) = (4950092.461, 5433858.207, 6059483.934), stdev = 320216.222
[info]   Confidence interval (99.9%): [5155796.547, 5711919.868]
[info]
[info]
[info] # Run complete. Total time: 00:05:10
[info]
[info] Benchmark                               (threads)  (tpt)   Mode  Samples        Score  Score error  Units
[info] a.a.ForkJoinActorBenchmark.floodPipe            1      1  thrpt       20  5430810.893    77372.655  ops/s
[info] a.a.ForkJoinActorBenchmark.floodPipe            1      5  thrpt       20  7172043.309    86242.644  ops/s
[info] a.a.ForkJoinActorBenchmark.floodPipe            4      1  thrpt       20  4801234.598   231469.532  ops/s
[info] a.a.ForkJoinActorBenchmark.floodPipe            4      5  thrpt       20  5433858.207   278061.661  ops/s
If this trips someone over then they get what they deserve ;-)