Bring back ReviewReply.deleteIfEmpty, and fix reply publishing.

When ReviewReply was ported over, deleteIfEmpty didn't come with it. It
was still being called though, meaning that users couldn't cancel or
delete comments.

Even if it was brought over, though, it's been pretty broken for a long
time. It didn't actually successfully delete the review reply (just the
comment), and it didn't take into account file attachment comments.

It's now ported over and rewritten to do that. Some stuff was cleaned up
to better manage the comment ID and object for an editor to make this
work better.

There's also fixes for publishing. We set the attributes after knowing
the reply is ready. Same when publishing a review, in case.