Refactor and documentation

All the code is documented properly with in the standarts of [PEP-8](http://legacy.python.org/dev/peps/pep-0008/) and [PEP-257](http://legacy.python.org/dev/peps/pep-0257/)

Made some refactoring to reduce code complexity and improve code reusability.

Pylint analysis score: **7.65/10**

Added new ignoring files from http://www.gitignore.io/