WIP: Fast path for BlockingObservables.

I did more benchmarking with blocking observables and found they're quite wasteful, even in the T cases because they always use the iterator which in turn needs a LBQ. They produce quite some amount of garbage in there.

I think optimizing this is quite important because a lot of users will, even finally at the end of their observable stream, block at some point to return the result into a servlet or whatever.

I set out to fix that as as a start with single() and it seems to pan out quite nicely. I want to modify all of the T getter methods appropriately and do some refactoring, but wanted to share some early results.

Before on single():

Iteration   1: 3949703.236 ops/s
Iteration   2: 3947313.447 ops/s
Iteration   3: 3955001.570 ops/s
Iteration   4: 3839775.088 ops/s
Iteration   5: 3916265.155 ops/s

After:

Iteration   1: 13254605.691 ops/s
Iteration   2: 13115515.080 ops/s
Iteration   3: 13238426.756 ops/s
Iteration   4: 13165076.351 ops/s
Iteration   5: 13208966.944 ops/s

That's over 3x perf improvement, also we're getting rid of the LBQ in the iterator.

It basically reuses the code from forEach, so things can be refactored into helper methods later.

I'd like to get your thoughts on that @benjchristensen and others, if I don't hear back that I should stop going down that route I'll update this PR once it's done.