Desk hotfix text.  Desk spam reduction.  openscholar/openscholar#3378 openscholar/openscholar#3376

Updated text for milestone notifications.  If the ticket is a hotfix, it is no longer scheduled as part of a release.  The text reflects that.  See 3376 for a listing of all the text.

While working on that it occurred to me that I send replies during milestone changes.  Since hotfix replies are happening outside of milestones, I wasn't sure if I could use those to determine if a reply was needed.  So...

I added a bit of spam prevention.  Instead of calling create_reply directly, I put it in a wrapper function.  It reads all the replies in a desk ticket (even if it has to page through 50+ of them) and only sends the reply if it hasn't already been posted.  A case that's had its milestone switched back and forth several times will obviously not get replies anymore, but we're not supposed to do that anyway so I think that's a silly edge case.