Experimental: ObjectPool with WeakReferences

An experimental implementation of ObjectPool that removes the explicit release and uses WeakReferences.

Part of exploration for https://github.com/ReactiveX/RxJava/issues/1908

The perf numbers on `observeOn` suggest none of this matters :-)

```
1.x Branch

Benchmark                                         (size)   Mode   Samples        Score  Score error    Units
r.o.OperatorObserveOnPerf.observeOnComputation         1  thrpt         5   108090.165     3468.773    ops/s
r.o.OperatorObserveOnPerf.observeOnComputation      1000  thrpt         5     7010.679      283.868    ops/s
r.o.OperatorObserveOnPerf.observeOnComputation   1000000  thrpt         5       13.588        0.354    ops/s
r.o.OperatorObserveOnPerf.observeOnImmediate           1  thrpt         5 16268519.793   707702.931    ops/s
r.o.OperatorObserveOnPerf.observeOnImmediate        1000  thrpt         5   149998.180    31025.889    ops/s
r.o.OperatorObserveOnPerf.observeOnImmediate     1000000  thrpt         5      159.109       11.987    ops/s
r.o.OperatorObserveOnPerf.observeOnNewThread           1  thrpt         5    17182.508      629.781    ops/s
r.o.OperatorObserveOnPerf.observeOnNewThread        1000  thrpt         5     7892.906      139.532    ops/s
r.o.OperatorObserveOnPerf.observeOnNewThread     1000000  thrpt         5       13.489        0.527    ops/s

This PullRequest using WeakReferences

Benchmark                                         (size)   Mode   Samples        Score  Score error    Units
r.o.OperatorObserveOnPerf.observeOnComputation         1  thrpt         5   108133.231     9569.065    ops/s
r.o.OperatorObserveOnPerf.observeOnComputation      1000  thrpt         5     6389.620      581.448    ops/s
r.o.OperatorObserveOnPerf.observeOnComputation   1000000  thrpt         5       13.181        1.719    ops/s
r.o.OperatorObserveOnPerf.observeOnImmediate           1  thrpt         5 15153898.775   927814.232    ops/s
r.o.OperatorObserveOnPerf.observeOnImmediate        1000  thrpt         5   169459.680    15935.085    ops/s
r.o.OperatorObserveOnPerf.observeOnImmediate     1000000  thrpt         5      154.516       32.170    ops/s
r.o.OperatorObserveOnPerf.observeOnNewThread           1  thrpt         5    15585.688     1205.259    ops/s
r.o.OperatorObserveOnPerf.observeOnNewThread        1000  thrpt         5     7871.875      295.553    ops/s
r.o.OperatorObserveOnPerf.observeOnNewThread     1000000  thrpt         5       14.040        0.628    ops/s


Pooling Disabled (create a new object each time in `borrowObject`)

Benchmark                                         (size)   Mode   Samples        Score  Score error    Units
r.o.OperatorObserveOnPerf.observeOnComputation         1  thrpt         5   108130.153    10452.845    ops/s
r.o.OperatorObserveOnPerf.observeOnComputation      1000  thrpt         5     6948.319      123.024    ops/s
r.o.OperatorObserveOnPerf.observeOnComputation   1000000  thrpt         5       13.294        1.165    ops/s
r.o.OperatorObserveOnPerf.observeOnImmediate           1  thrpt         5 15107600.987  1565384.083    ops/s
r.o.OperatorObserveOnPerf.observeOnImmediate        1000  thrpt         5   170127.608    16674.301    ops/s
r.o.OperatorObserveOnPerf.observeOnImmediate     1000000  thrpt         5      155.075       20.204    ops/s
r.o.OperatorObserveOnPerf.observeOnNewThread           1  thrpt         5    15730.556     1586.146    ops/s
r.o.OperatorObserveOnPerf.observeOnNewThread        1000  thrpt         5     7911.561      439.432    ops/s
r.o.OperatorObserveOnPerf.observeOnNewThread     1000000  thrpt         5       14.472        0.982    ops/s
```

Need to sleep on this more but wanted to post this in case it triggers thoughts on ideas for anyone else.
I think this entire map can be eliminated with a `WeakReference` subclass which holds the `T`.
```java
private static final WeakTeaRef<T> extends WeakReference<Ref<T>> {
  final T value;

  WeakTeaRef(Ref<T> value) {
    super(value);
    this.value = value.t;
  }
}
```
and then when polling:
```java
WeakTeaRef<T> ref;
while ((ref = (WeakTeaRef<T>) refQueue.poll()) != null) {
  T t = ref.value;
}
```
We employ this technique a few places.

https://github.com/square/picasso/blob/ebdfe5d994eb1afc41263346ca90eba51a9dfce6/picasso/src/main/java/com/squareup/picasso/Picasso.java#L555-L556
https://github.com/square/picasso/blob/ebdfe5d994eb1afc41263346ca90eba51a9dfce6/picasso/src/main/java/com/squareup/picasso/Action.java#L26-L33