Slightly de-simplified things a slight bit. Added the ability to pass in custom email subject and message templates to the send() method. Also added a "extend" method, which is probably a very bad idea.

Send now supports passing in "subject_template" and "message_template" thus letting you send customized messages for different types of user without having to subclass everything and its parent.

Also, I have, through a tremendous amount of direct experience, learned that humans suck at reading their email. As a result, approximately 99.9999% of our users miss their first invitation email, and of those, 103.8% of them don't tell us about it until after their invitation has expired (which I've set to 14 days, which you'd think would be enough). As a result, they call our support people, who need a way to get around the expiration date. This method basically kicks the expiration down the road a bit, which is usually all anyone needs.

A much, much better way to do this would be to send out reminders before people's invitations expire if they haven't been used yet, but that's not very simplified, is it?