Diferencia entre Kernel # yield_self, yield (self) y Object # tap en ruby

Ruby 2.5.0-rc1 ha sido lanzado e introduce un nuevoKernel#yield_self método.

Cuál es la diferencia entreyield_self, yield(self) y lo existenteObject#tap ¿método?