api.Device: Query MAC address with ARP packets when it's unknown

The responsibility of deciding whether the MAC address should be queried
or not is down to `Device`, but not the dirty work of actually querying it.
Therefore, this is performed by `network.scan_device()`.

I've made this decision, not only with purposes of separating
responsibilities but also because I envisage `scan_device()` to become more
complex when we want to track a MAC address in case it changes its IP
address.

The IP address I've set in the unit tests is hardcoded because I don't have
enough test infrastructure to tell the tests what devices I have connected
in my network. This will be tackled later.
core/network.py: Implement a class that runs Man-in-the-middle attacks

This class represents an attack over a device in the network. This code
works but needs polishing because there's some duplication.
core/network.py: Add get_gateway, necessary for MITM
netcontrol/api.py: Move Device to core/network.py

`api.py` needs to use Device only to expose it in the API, whereas other
modules like `network.py` will make more extensive use of it. Since
`api.py` is highly likely to import most of the low-level modules, it's
better that they are able to import it from another module different than
api.py. Otherwise, it would be extremly easy to get circular imports.
ui/mainwindow.py: Use Device objects

Now, the functions defined in the API need to get Device objects. This
commit introduces the proper modifications in `ui/mainwindows.py` so that
it complies with the specs.
core/control.py: Use `network.MITM` in order to take control over devices

This was the intended purpose of all the commits before this one. This way,
we get rid of the burden of using a system call for this task, and we won't
have to worry about killing extra processes.
run_test_suite: Run Python tests with nosetests