Yield hack and a new receive function.

This patch includes the followings:

- Yield hack: this is effective if the number of core (-Nx) is small.
- New receive function: this was explained in the private e-mail message. Note that we should use per-core free lists for better performance. Anyway, this hack improves performance much. And note that currently OS's malloc() is used. I don't know whether or not GHC's malloc should be used.
- Small refactoring.