Main muscle for the program.

Handles user prompts and calls other functions to do the 'dirty work'.