Use yield not block.call

using an explicit block is significantly slower than just yielding to the given block. Since we are not keeping block here for future usage I think yield should be used.

Also improve the error message a little.