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.
Indentation nit.
Corrected not operator
Bug fix.

Did not pass environment argument correctly to internal processes.
ID changes

Changed get_host_id() method to get_id() to unify ID accessor interface.
Also, remove_flow() now takes a flow_id rather than a flow as argument.
Removed add_sending_flow() method.

We've agreed to program flows to start at the appropriate time. Thus,
this method is not needed since the environment is not responsible for
inserting flows at the correct time.
Changed call to link's enqueue method.

The link's enqueue function accepts packets from hosts/routers. Its
transmit function, however, is internal to the link and does the actual
transmission of packets across the wire.
Matched ReceivingFlow API
Added statistics reporting function
Host reports send/receive rate.

Added report() method that conveys the average per-host send/receive
rate since the last report.

Measurements are given in dictionary format. I rely on an enum of
Measurements that the environment expects from all its devices.
Reordered initialization.
Use environment time interval

Rather than measuring time interval internally, host uses environment's
interval attribute that specifies how often it will call on report.
Corrected ms to s conversion
Fixed initialization and conversion factors

Forgot to use self keyword during initialization and used wrong
milliseconds to seconds conversion factor.
Changed initialization and added mutators.

Made dependent link and flow objects optional during initialization with
default values. Added mutators for environment to populate these
parameters after initialization.
Reordered mutators for aesthetic purposes.
Matched ReceivingFlow constructor API
Match report() API in environment.
Name change from receiving_flow to ReceivingFlow
Merge pull request #12 from kexinrong/Host

First host implementation.