+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 #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 #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
Merge pull request #15202 from akka/wip-15195-producer-interable-patriknw

+str #15195 Add internal SynchronousProducerFromIterable
Merge pull request #15204 from akka/wip-15197-flow-append-duct-patriknw

+str #15197 Add flow.append(duct)
+str #15173 Add user support for actor consumer endpoint

* with full control over back pressure
* and pluggable request strategy
Merge pull request #15214 from akka/wip-15173-actor-consumer-patriknw

+str #15173 Add user support for actor consumer endpoint
=str #15250 Use BlackholeConsumer for Flow.consume()

* last operator in front of consume() was treated specially, running
  in impl.ActorConsumer instead of the ordinary processors
=proj updating jmh plugin version to 0.1.2
Merge pull request #15261 from ktoso/update-jmh-plugin

=proj update jmh plugin to 0.1.2
+scr additional functions for tagging issues on github