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

This is necessary for ManInTheMiddle, which was assuming that this function
was already implemented.
core/control.py: Use `ManInTheMiddle` instead of system calls to ettercap

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.
network.MITM: Catch any errors raised by scapy.send()

This is necessary because there seems to be a problem when we try to use
scapy in a multithreaded environment, presumably due to resource locks.

A much neater fix to this would be to synchronise the two threads created
by an attack so that they never execute scapy.send() at the same time. A
problem we'd have by trying to tackle the issue this way is that when the
application has many attacks going on, we'd need to synchronise all of
them.
api.stop_control: Compare device with control's device

This fixes `stop_control()`, which was trying to compare a `Control` object
with a `Device` and therefore, a type comparison error was being launched.

The device which the control is performed over needs to be retrieved from
the outside, it's been made public, and renamed in order to have some
naming consistency.
Control: Implement __eq__ method

So that the comparison between control objects is not so cumbersome by
accessing individually to the device's IP and MAC address.
tests/test_control.py: Add unit test for starting and stopping a control

Although this test doesn't guarantee that the device is properly
controlled, at least it exercises the code and proves that it doesn't
break when these methods are used.

Most of the tests that will use this feature will have the same problem.
extra/pylint.conf: Disable W0703

Warning message W0703: Catching too general exception Exception
ui/mainwindow.py: Rename "Pause" option to "Stop"

First of all, because "pause_control()" isn't yet implemented. Also,
because "restart control" is in the roadmap but it's not going to be
addressed in this development iteration.

In the renaming process, I've found a problem in
`MainWindow.stop_control()`. It was treating the whole string of the
selected option as if it had the IP address separated from the status by a
space. Because it's being displayed as "<ip_address>:<status>", the string
needs to be split using the colon.
api.stop_control: Stops and removes the control

The use case of "stop control" is to completely stop it, tear down anything
related to it that is not going to be useful anymore, and remove it from
the system.

What this function was doing before is something similar to what "pause
control" is going to do.
Merge branch 'separate-mitm-from-control'