Split project into smaller modules.

Created new module package called modules, moved exceptions.py to
modules/.

Moved the Shell() class to its own module under modules/shell.py.

Moved ContactHandler(), GroupHolder() and ContactHolder() to their own
module in modules/contacts.py.
Add several bug fixes and changes to the code.

Several exceptions are being handled where before they weren't, also
fixed several exceptions who weren't being handled correctly.

Made it so you can have more than 1 contact with the same as long as its
not in the same group, also ContactHandler() doesn't keep track of
contact names anymore and simply fetches them from their groups, this is
to avoid names clashing in the contact_list. But due to these changes
modify_contact and search_contact no longer worked so i commented them
out to be rewritten later.

All do_* methods in Shell() who need arguments check for a minimum
number of arguments before being executed, the user can still supply
more arguments than necessary but those surplus arguments will be
ignored.

Shell() now takes 1 positional argument cmd_splitter used to split the
users arguments.

Code has been reformatted and now looks much better.
Update README