Update script to be more defensive

- Convert entire dotfiles script to be more defensive, and easier to
  unit test
- Convert all repetitive task to a reusable script
- Compartmentalize all common tasks into functions
- Create constants for use across the script
- Create helper utility functions
- Create function for passing in short and long form options
- Update README with new screenshot
- Update CHANGELOG

Issue: #31, #19