contraMap and andThen on TypedSink/TypedSource

closes #884 
closes #885 
That said, I am happy to add:
```scala
  final def butFirst[U](fn: U => T): TypedSink[U] = contraMap(fn)
```
I think that contraMap is at least the principled name for this operation, and I think it applies in more cases than butFirst.

How does this argument strike you?