I have tried a few implementations and - mostly because the `ArgumentError` should only be raised if the argument type is block and the block value is empty - the cleanest one that still delivers a performance benefit is the current one. Using kwargs was very significantly slower.