First host implementation.

Hosts consist of two internal processes: monitor_outgoing_packets and monitor_incoming_packets. These follow a passivate/reactivate framework through the events send_packet and receive_packet, respectively. Note that the host class itself performs the reactivations of its two internal processes. Flows and links indirectly reactivate the internal host processes through the send_packet and receive_packet API, respectively.

Is this a suitable framework for process interaction? I like this better than interruptions since one cannot pass objects through interruptions (I think). If this looks good, let's commit to this model for future process interactions.

Tests to follow upon implementation of environment, flows, and links.
Here we are handling the case for receiving data packets right? What about acknowledgement packets? Does the receiving flow trigger the receive_ack event in the sending flow directly? If that's the case, at least the packets should have a field for sending flow id as well. Right now incoming_packet.get_flow_id() is only storing receiving flow id.