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
Playground code to start with.
Committing stylistic fixes.
Addressed most comments on my previous Git push

I addressed all (except one) of mtomwing's comments. As to the question
"Why are you only looking at the first attribute ...?", at the moment, I
do not know too much about the structure of the Plugin Modules yet. As
far as I am aware, there is going to be one class that contains
information about the plugin. From observation thus far, that class is
the first attribute of the Module. If it is known that there are other
cases (one Module contains multiple plugin classes, global attributes
will be defined in the Module before the class definition, etc), I will
make an effort to modify the algorithm.

For dideler, I removed the comments I deemed "obvious" but I'm not sure
if our definitions of "obvious" agree. The example you gave was
amazingly obvious (my vocabulary fails me). I usually put comments up
when I feel something must be explicitly stated. I'm not entirely sure
where this feeling comes from though.

Also, noted. In later stages, I'll move unnecessary things to
appropriate locations. Though if __init__ only does "trivial"
initialization, how does the "rest" of the initialization happen? I'm a
tad confused.

For zxiiro, I hope my variable names are rather self explanatory. Please
just say if any aren't, and I'll try to think of a better name.

I think I added the license properly?
Renamed 'nodes' to 'plugins'.
Removing redundant tox.ini
Removing the playground and adding manage.py as suggested.
Added a module generator to manage.py.
Temporarily commenting out unfinished code to allow Travis to succeed.
Is now able to handle __init__.py files properly. (As far as I am aware)
removed a useless line.
Moving manage.py to framework/plugins/
Renaming folder.
corrected some of the bad practices that were commented on
Starting code for reality check.
Making corrections specified in GitHub comments.
Fixing conflicts?