1) more readable DI annotations: removed calls on prototypes, used $inject
2) directives as classes are not supported by angular directly, so made them factory functions