THINK-247

This branch a new developer behaviour of branching per sub-task. As our branches start to implement larger features that require more complex logic this makes sense. However we probably want to start doing rebases rather than merges.

This branch represents the start of the work on invite_tokens, share_tokens. There is significant complexity in the api_controller that I'd love @twinge to take a look at.
I'm surprised this works. I would have expected you to need to do `generate_token('share_token')` where the field you want is a string (or symbol). I don't see how passing `share_token` which has a value of `nil` does the right think in the `Visitor.where('? = ?', field, token)` line below. 

Also, get change `if xxx.nil?` to `unless xxx` in this method.