map()

Implements a generic map() function. Unfortunately, this has to be able to infer the return type to work :sob: