Fix #427 warn user about erasing new talk info

- Add function confirm_add, called on addButton clicked

- Add helper functions are_fields_enabled and unsaved_details_exist for
  use in confirm_add

- Refactor clear_talk_details_widget to include category

- Add docstring for unsaved_details_exist function
Fix #461 move youtube upload into new cli
- Remove src/youtube-uploader
- Refactor YoutubeFrontend to fit new cli
- Refactor YoutubeService to fit new cli workflow
- Add subparsers to cli.py
- Document argument parameters, update docstrings
- Check oauth2 token file exists before upload
- Use positional arguments in cli.py
- Cleanup frontend/youtube.py
- Make methods static where possible
Make Travis fail the build immediately in some cases

Travis will fail the build if:

  - flake8 doesn't exit with 0
  - unit tests don't pass
  - documentation fails to build
Fix QTimer messages on unittest completion

Resolves the messages that appear at the end of unittest run:
    QTimer can only be used with threads started with QThread

Signed-off-by: Thanh Ha <thanh.ha@alumni.carleton.ca>
Fix #500 Database update function should update description and category

- Include description and category in update_presentation function

Closes #502
Signed-off-by: Thanh Ha <thanh.ha@alumni.carleton.ca>
Fix #508 Change Add New Talk button to a command button

- Move 'Add New Talk' button from TalkDetailsWidget to CommandButtons
- Connect new 'Add New Talk' button to confirm_add

Close #509
Signed-off-by: Thanh Ha <thanh.ha@alumni.carleton.ca>
Remove unnecessary comment