Refactor Host, HostInterface, Link into abstract classes

This refactoring allows to have multiple implementatinos for the same entities.
control_flow_test.py will fail because of this change. This is due to pickle
unable to load the new classes. It will be fixed in later commits.
Import style changes to keep things consistent
some refactoring to make pylint happy
Add deprecated decorator

Helps with identifying unused code. Copied from python's website
https://wiki.python.org/moin/PythonDecoratorLibrary
Add SSHEntity

Add parant entity for things controlled via SSH
Add missing unit test for SSHEntity

Forgot to include this in the previous commit
Refactor controllers entities

- Move controller code to a single file
- Add tests (unit and integration) for controllers
- Use SSHEntity as a base for VMController
Remove unnecessary commented lines
Remove redundant call for super in Link class
Make hw_addr_hash and ips_hash a private properties in HostInterface

These two properties has no use for the outside world. The hash should
be taken directly for the HostInterface the rest is just impl details.
Formatting changes
Formatting and style changes to address Colin's feedback
Reformat docstring to match sphinx guidlines
Rename get_concrete_impl to get_concrete_class in test cases
Make it possible to specify mac address for namespace hosts

Previously, mac addresses are auto generated for the host interface
in launch_namespace. This change make it possible to specify it by the
user.
Refactor hosts into a submodule in entities

There're so many hosts types, for clarity it's better to refactor them
into one submodule
typos in log messages
Add TODOs for untest code
fix module comments
minor code formatting