[split] bump util to 6.22.2-SNAPSHOT

RB_ID=493423
TBR=true
NO-QUEUE=true
[split] birdcage: util-cache is a scala_artifact

In order to appropriately suffix the util-cache artifact with the scala version during pants publishing, it needs to use the 'scala_artifact' constructor.

RB_ID=493729
[split] {finagle,util}-core: Slurry of PartialFunction micro-optimizations

Problem

PartialFunction has an isDefinedAt which must be called before
proper invocation.  However, PartialFunction#isDefinedAt and
PartialFunction#apply often entail many of the same costs (ie object
allocation due to unapply for literal PartialFunctions).

Solution

PartialFunction has a helper PartialFunction#applyOrElse so that
we only have to call it once.  However, applyOrElse takes a function,
so we must make singleton all-purpose functions to avoid extra
allocations.

Result

PartialFunction evaluation is cheaper.

RB_ID=492081
[split] util-app: add an option so that we can let apps fail fast if reading argument before args are parsed.

RB_ID=491925
[split] Reader.writable.fail: make reentrant

Problem

Since Reader.writable uses reentrant synchronization, it must ensure
that Reader.writable.state is set before potentially recursing via
setting promises.

This isn't a problem with vanilla Finagle services since everything is
run under an unwinding scheduler; however the TFE does direct
dispatch, and, in some circumstances, Reader.writable.fail is the
scheduler root.

Solution

Fix Reader.writable.state before setting the promise.

RB_ID=494715