Add map() and flatmap()

As discussed in #11.
:tada: