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.