Heh... It takes 46 secs on my machine. Can make it large, too.
As for the messy-ness... The problem is that Delete has strange rules as what you can do in a single Delete (when you add a deleteFamily all prior deleteColumn(s) are removed, etc). So deletes have to be written one-by-one to be correct (that is also why I added the Delete(kv) constructor, rather than an delete(kv) method).
A put, on the other hand, allows adding all put-related KVs of the same row into a single Put object. That's why delete-kvs are issued immediately, and put-kvs are collected into a single Put (that's also what the existing code does).
It is possible that particular row only has delete markers, so the Put is created when needed, and only written to the HBase when there were any put-kvs.