+str #15174 Add dispatcher setting to FlowMaterializer

* Verify dispatcher with custom default mailbox
Merge pull request #15183 from akka/wip-15174-flow-dispatcher-patriknw

+str #15174 Add dispatcher setting to FlowMaterializer
+str #15172 Add javadsl.Duct as free-standing Flow

* foreach Void
Merge pull request #15181 from akka/wip-15172-javadsl-duct-patriknw

+str #15172 Add javadsl.Duct as free-standing Flow
+str #15193 Expose some test producers in StreamTestKit
=act,tes Initial draft of internal MetricsKit

Note: This is NOT aimed to provide an micro-benchmarking solution.
The goal is to provide data for broad trend analysis. For techniques
that fight the inliner and other specialised techniques, refer to JMH.

+ custom console and graphite reporters
  - had to be custom because it's not possible to add custom metric
    types to the existing reporters
+ initial hdr.Histogram histogram() provider, see
  http://latencyutils.github.io/LatencyUtils/
+ Not using timers provided by Metrics, instead use the above histogram
+ Added average Actor size measurement
+ Measuring the "blocking time" when an actor is created, before we fire
  of the async part of this process; Measures in loop and will fluctuate
  a lot. Times are in `us` -- System.nanoTime should provide good enough
  resolution.
+ Measuring total actor creation time by using
  `KnownOpsInTimespanTimer`, which given a known number of ops, in a
  large amount of time, roughtly estimates time per one operation.
  // Yes, we are aware of the possibility of GC pauses and other horrors
+ All classes are `private[akka]`, we should not encourage people to use
  this yet
+ Counters use Java 8's `LongAdder`, which is metric's private;
  The new trend in Java land will be copy paste-ing this class ;)
+ Metrics are logged to Graphite, so we can long-term analyse these
+ Reporters are configurable using typesafe-config

! I'm not very happy about how I work around Metrics not being too open
  for adding additional custom metrics. Seems like a hack at places.
  I will consider removing the Metrics dependency all together.
  numbers

Example output:

```
-- KnownOpsInTimespanTimer-------------------------------------------
  actor-creation.total.creating-100000-actors.Props|new-EmptyArgsActor|…||-same
               ops = 100000
              time = 1.969 s
             ops/s = 50782.22
               avg = 19.69 μs

-- AveragingGauge---------------------------------------------------
  actor-creation.Props|new-EmptyArgsActor|…||-same.avg-mem-per-actor
                avg = 439.67
```

Conflicts:
	akka-actor-tests/src/test/scala/akka/actor/ActorPerfSpec.scala
	project/Dependencies.scala
	project/TestExtras.scala
	project/plugins.sbt
=str #15221 Fix typo in scaladoc
Merge pull request #15221 from guersam/wip-fix-typo

=str #15221 fix typo in scaladoc
+str : Various cleanups of internal streams architecture

 - factor out receive blocks for inputs and outputs
 - pump uses TransferPhases and become
 - Unification of Transformer and RecoveryTransformer
+str #15142 Initial support for timing streams

This PR includes most notably:
* `timed(_.streamops)` wrapper that measures time between start of
   processing and end of it.
* `timedIntervalBetween(T => Boolean)` which measures time between
  matching elements appearing in the stream
* DSL is enabled by importing from `extra.Implicits`
* Methods can be used without implicit by Importing extra.Timed.timed()
Merge pull request #15194 from drewhk/wip-stream-cleanups-drewhk

+str Various cleanups of internal streams architecture
Fixes #15158
Merge pull request #15182 from ktoso/wip-timed-ktoso

+str #15098 timed on streams
+str #15223 `timed` extra combinators for Duct
Note: not too happy about duplication of impl, but is required due to
the Flow and Duct not sharing any types (could use structural, not going there though).

Resolves #15223
Merge pull request #15225 from ktoso/wip-timed-duct-ktoso

+str Timed ops for Duct[I, O]
=tes #15165 MetricsKit should not nullpointer on racy graphite usage
The report() call can come from multiple threads in our code,
yet it was opening/closing a shared graphite client instance in this
method, causing NPE when periodic reporting kicked in during a manual
report() call. We want to be able to do this - thus rewrite to safe impl

Removed metrics-graphite dependency, replaced by in house impl.
The previous was using discrete write() calls, which could be entangled
when called from multiple threads, and produce invalid metric lines.
Current impl is simpler and threadsafe, as the lock for write(String) to
aquired for the entire string lenght's write (unlike multiple write calls).

Resolves #15165

Conflicts:
	akka-testkit/src/test/scala/akka/testkit/metrics/reporter/AkkaGraphiteReporter.scala
	project/Dependencies.scala
+proj,ben #15180 adding akka-bench-jmh, JMH benchmarks

How to use:
```
project akka-bench-jmh
run -i 1 -wi 1 -v extra -f 0
```

Added a few benchmarks for basics like
* actor ! // probably skewed currently
* event stream subscribing
* event stream publishing
* actor creation

Resolves #15180
Merge pull request #15185 from ktoso/wip-JMH-ktoso

+pro,ben #15180 add akka-bench-jmh, enable running jmh benchmarks form sbt
Merge pull request #15210 from akka/wip-15193-test-producers-patrikwn

+str #15193 Expose some test producers in StreamTestKit
+str #15195 Add internal SynchronousProducerFromIterable
+str #15197 Add flow.append(duct)

* and duct.append(duct), and missing javadsl flow.produceTo