Memory platform counters

Adding summingbird counter support for the Memory platform.
What if the jobId is present, but the values don't match? Looks like this is a silent failure in that case.

I think we need something like:
```scala
def registerCounters(jobID: JobId, counters: List[(String, String)]): Unit = {
  val memoryCounters == // same as it is now.
  @annotation.tailrec
  def put(m: Map[String, MemoryCounter]): Unit =
    countersForJob.putIfAbsent(jobID, memoryCounters) match {
      case null => () // The jobID was not present
      case previous if !previous.keySet.contains(m.keySet) => // Make another try
         put(m ++ previous) // prefer the old values
      case _ => () // there is something there, but the keys are all present
    }

   put(memoryCounters)
  }
```