improved type hinting
changed traits and interfaces to abstract classes
added travis.yml