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.
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
Refactor controllers entities

- Move controller code to a single file
- Add tests (unit and integration) for controllers
- Use SSHEntity as a base for VMController
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
Refactor out lambda functions for coloring output

These two functions are usefull in other contexts. Namely, coloring
SSH output.
Improve SSHEntity and add LocalEntity

Hardcode paramkio into SSHEntity
LocalEntity is designed to work like SSHEntity but executed commands
locally
Add the ability to block while command finishes executing

If block=True and redirect_output=True execute_command will block
until the process terminate itself.
- Use compositing when using SSHEntity in VMController
- Minor change in SimulationState to use the right new interface for VMController
- More testing
Allow NamespaceHost to accept single or list of interfaces
fix the use of NamespaceHost in topology
allow the command executer to passed with the ControllerConfig object
Move ARP reply unit tests to hosts_test.py
Add helper methods to deal with dynamic class loading
Add json serialization/deserialization for basic entities
Remove extra white space
Add helper function to detect if an object has to_json method
Merge pull request #19 from ucb-sts/entities_refactoring_pr

Entities refactoring