Add a Sink type, fix some variance issues

Partially addresses #373 by adding a `TypedSink[T]` and `TypedSource[T]` but keeping `Mappable[T]` as the typed Source.