Add combineLatest() and zip() over multiple signals

This partly recovers the utility of `+combineLatest:` and `+zip:` from the Objective-C API, while retaining type safety.

This was the easiest way I could think of to do it, but there might be others.

/cc @robrix