Diferença entre o Kernel # yield_self, yield (self) e Object # tap em ruby

O Ruby 2.5.0-rc1 foi lançado e apresenta um novoKernel#yield_self método.

Qual é a diferença entreyield_self, yield(self) e os existentesObject#tap método?