Monad transformers proof of concept

Sorry for the tremendous amount of changes but I wanted to explore decomplecting the monad behaviour from its types (context). I'd like to know your opinion on the changes.

You can check `tests/test_maybe.cljx` to see the maybe transformer in action. 

There are some things that I would like to add but I still haven't figured out the way to implement, and maybe aren't feasible:
- automatic lifting of values inside a monad transformers (currently I don't think it's possible with more than two layers of monads in a transformer);
- automatic infer of monad transformer context (like with monads, maybe providing macrotic syntax we can achieve this);
- reader and writer monads (I'm thinking about having the same approach as Haskell, making MonadState, MonadReader and MonadWriter protocols, this transformers with any monad that implements this protocol can be made instance of them easily);
- continuation transformer.

I kept all the test from 0.1.0 and they all pass.