Remove UvStream class start add event loop subpackage

This is the start of a huge refactor that has the following goals:

- Simplify code
- Reduce coupling between components
- Remove most python-specific metaprogramming practices in favor of a more
  classic/simpler object-oriented approach that should mirror to constructs
  found in other languages more easily
- Improve readability
- Use flake8 as a linting program
- Provide an event loop layer using asyncio/trollius, which should make this
  library more easily portable to other python implementations

The motivation behind those goals is to transform this project into a
well-documented reference implementation of a Nvim client that can easily be
ported to other languages.
Implement event loop layer with pyuv

This is a port of the previous UvStream class to the new architecture.
Implement event loop layer using asyncio

The `asyncio` module is the new standard for eventloop-based applications. It
should enable usage of this library in platforms where pyuv is not available.
Implement __init__ module for the `event_loop` subpackage

The module tries to use pyuv event loop if possible, falling back to the asyncio
implementation.
Implement the msgpack layer
Implement msgpack-rpc layer
Implement synchronous msgpack-rpc layer

Previously the synchronous API was emulated by the `Client` class, now it fully
implemented in the msgpack-rpc subpackage
Add __init__ module for the `msgpack_rpc` subpackage
Implement `compat` module for helping with compatibility issues
Rewrite all API classes and move to 'api' subpackage

The API layer now fully distinct from the msgpack-rpc layer. Every API class is
created with a Session instance for making msgpack-rpc requests.
Move script_host.py/plugin_host.py to 'plugins' subpackage
Refactor the initialization package to reflect the new API
Update tests
Add more python versions to travis and install flake8 plugins
Specify version/platform dependencies in setup.py
Update documentation