add Typed Channels, see #2929

everything works AFAICT, although there are some things to be optimized later:

* allow use of type aliases to shorten declarations
* the docs are not geared towards beginners, but they should be thorough (this is intentional at this point)
* optimize away creating a PromiseActorRef when we see no reply will come (for polymorphic channels this must be done at runtime)
* add nice sugar for silencing/stashing channels
* split channels by communication (e.g. by sender or by an ID taken from the message)
* allow .narrow to infer the desired type (this requires it to become a macro as well)