Contact Validation

I moved the validation logic into the view model and split it into
sections to make it easier to understand.