Merge branch 'release-1.0' into develop
Updates requirement.txt
Updates requirement.txt
Updates requirement.txt
Updates requirements.txt, mock modules
Updates mock modules
Documentation update
Adds Graph class, code base cleaning

I encapsulated the graphing functionality into a class, and tweaked
MonitoredEnvironment to allow processes to specify a time step for
evaluating a registered getter.  Also started cleaning up some of the
code base.  For now, I standardized the use of underscored attributes
within the implementation, in order to decouple class interfaces from
their implementations.
Created Reno.burst

I created the Reno.burst method for injecting packets into the network,
and modified Reno._wait to use the burst method for retransmitting
packets, as before it was simply dumping them all into the link buffer,
and causing massive packet losses.  Also alters the alpha values for
test case 2 to induce greater fairness.
Fixes TCP Reno fast recovery

TCP Reno was getting stuck in fast recovery mode, and it turned out to
be an issue with the timeout length (it was timing out during fast
recovery, causing it to re-enter fast recovery mode, creating an
inescapable loop).  I fixed it by setting the timeout to be the maximum
of the current timeout length and 2 * RTT each time Reno receives an
acknowledgement.
Creates TCP abstract base class

I created an abstract base class for TCP algorithms containing things
like window, timeout, etc. properties & commonly used utility functions.
Also fixed packet retransmission for FAST TCP (which was broken for test
case 0).  Also made some minor stylistic changes & added some inline
comments.
Cleans up resources module

I altered LinkBuffer.buffered to actually be directional, added some
inline comments, and made cleaned up some outdated code & comments.
Finishes clean up of process module

I added the Router.routers property to simplify accessing the list of
connected routers, some inline comments and the _flush_wait attribute (to
get rid of the magic number in Link._flush for the empty buffer timeout)
in the Link class.  Also updated Link.cost to use the now directional
LinkBuffer.buffered, and moved the call to LinkBuffered.update_buffered
to Link.receive, i.e., when the buffer increases in size.
Moves Network class to test module

Given that the test module has become the home of all other simulation
testing functionality, it seems appropriate to move the Network class
there, and remove the Network module, especially since Network is
heavily dependent on things defined in test, and test cannot function
without the Network class.
Removes monitor module

Why was this still here?  It's so outdated it hurts
Fixes over capacity link transmission

Because we were calculating transmission as the time-averaged sum of all
traffic on the links, we were getting transmission rates greater than
the link capacity.  Transmission is now calculated directionally, and
the graphs look correct.  Also made some changes to the _reset method to
support this feature, as well as some minor stylistic
changes/documentation updates
Documentation update

I removed the Sphinx ReST file for the network module, now that it's
gone, and updated all of the documentation to reflect all current changes.
Adds reset class decorator, removes nonzero kwarg

Since three of the process classes used the same (by now extremely
generalized) _reset method, I decided to turn it into a class decorator,
and moved it to the resources module, since it is most closely
associated with the MonitoredEnvironment class.  Also removed the
nonzero keyword argument from MonitoredEnvironment.register & related
methods, since it doesn't actually offer any utility, and was originally
added for debugging purposes.
Adds script interface, simulate

I used argparse to write a simple Python script to provide a simple
command line interface.  Tag filters (based on legend label?) are coming
soon to the CLI.  Also made some stylitic changes & removed monitoring
of some debugging variables
Adds tag-based filtering to the simulate CLI

I added options to the simulate script to allow users to specify which
links, hosts, and flows they wish to display data for.  If none are
specfied, all data will be displayed.  There is still no option to
control which monitored values are output, but that should probably be
controlled from within the simulation code (we have to run the entire
simulation anyways, why display less data than we generated)