Split save method out into before_save and after_save

Also move some stuff around for cleanliness reasons.