Can you move this above so we only reflect once (not in a tight loop). Something like:
```scala
val putter: Function3[JMap[K,V],K,V,Unit] = semi match {
  case case mon: Monoid[V] => { (result, smallK, newV) => 
    if(mon.isNonZero(newV)) result.put(smallK, newV)
    else result.remove(smallK)
  }
  case _ => { (result, smallK, newV) => result.put(smallK, newV) }
}
```

This should only add the cost of a virtual method, but that may even get compiled away, I don't know.