Changed model's implementation

The code in the model.py has been refactored. Now the classes are now compatible with python's AST module and model.py has compatibility (mostly) with PEP-8.

The interface is the same except for the use of `type` instead of `_type` for it is fine to have type as an attribute, and the str of the same was misleading..

The changes pass all tests, but you might want to make your test cases more elaborate, for something might have broken...