improved mapKeys to support subset of mapped keys.
added unit tests, removed almost duplicate implementation between subset and mapKeys
added join with an optional key remapper, allowing some more flexible joins (e.g. Complex keys left joining into a simple keyed vector)