Checking for windows style execs in is_available

Stem tries to check that a command is available prior to running it, which
choked on Windows due to the '.exe' extension. Issue caught by reganeet and
fix suggested by him.
Replacing os.uname() calls with platform.system()

I was doing os detection by calling 'os.uname()' which has the unfortunate
disadvantage of not functioning in Windows. The 'platform.system()' apparently
does the same for our purposes but... well, works.

Caught thanks to reganeet on...
https://trac.torproject.org/projects/tor/ticket/5493
Making system unit tests more platform independent

On Windows the alternate path separator caused the unit tests for expand_path()
to fail. Switching the expand_path() and is_relative_path() to not make any
effort to work on Windows and fixing the test to be platform independent. In
the future we should make these funtions work on Windows but this isn't vital
at the moment and a pita due to its '[A-Z]:\\' prefixes (I really don't wanna
do a regex just to check if a path is absolute...).
Removing stem.util.system.is_relative_path()

Why did I make this function again? Python already has os.path.isabs()...
Test for descriptor with non-ascii content

Test suggestion by Karsten. This reads a descriptor with non-ascii content
(hiragana and something else), checking that the results match expected values.
Stop tracking last-modified timestamps if file disappears

Improvement suggested by Karsten. For long running processes with a rotating
pool of descriptors we could accumulate a lot of 'path => last modified'
entries, so only including the entries for files that still exist.
Splitting relay and bridge server descritors

Making separate classes for relay and bridge v3 server descriptors. This is the
more proper object model and allows us to easily handle their differences in
terms of parsing and validation.

This includes the implementation and an integ test, but the implementation
isn't yet complete (missing or-address parsing) and we still need unit tests.
The current unit tests pass but the integ test fails due to or-address.
Dropping duplicate constructors

Bridge and relay server descriptor constructors are identical, moving to
parent.
Server descriptor reformatting

Cleaning up the recent changes to split apart relay and bridge descriptors,
dropping an unnecessary parser class and rearranging things to be more
readable.
Utility for validating IPv6 addresses

Function and testing to check a string is a valid ipv6 address.
Handler for bridge descriptor 'or-address' entries

Parsing 'or-address' entries in bridge descriptors. This parsing logic should
be moved to the ServerDescriptorV3 class if/when ipv6 support is available to
normal relays.
Differentiating read bridge and relay descriptors

The last integ failure was due to our attempt to read a bridge descriptor file
as a relay descriptor, which doesn't work because it is missing cryptographic
entries. Adding a bit of logic to differentiate relay from bridge descriptors
so we can parse them as their appropriate type. The cues the difference based
on the 'Unnamed' nickname and '10.x.x.x' address scrubbing.
Moving relay/bridge differentation into parse_file_v3()

It was confusing for parse_file_v3() to only work for relay server descriptors
so moving the hack to differentiate relay from bridge descriptors there. This
is also nice because it moves server descriptor logic out of the general
__init__ module and into the one that's specifically for handling server
descriptors.
Unit tests for bridge descriptors and related fixes

Unit testing the new bridge descriptors. This mostly focused on parsing
or-address entries and the validation that the class does for scrubbed values.
Fixes included having string port values and not checking that or-address
addresses were scrubbed.
Removing deprecation warnings for server descriptor fields

The read/write-history and eventdns server descriptor fields are part of the
spec but no longer used. I was logging a notice that they're deprecated when
we encountered them, but this is neither useful nor does it make sense. We
might be parsing old metrics archives where those attributes are perfectly
valid.

Integ tests include a check that those aren't seen in the wild, which is what I
really care about.
Removing timeout from descriptor reader enqueue calls

The reader had a timeout for enqueue operations so it could periodically check
if we were stopped while waiting to insert a descriptor that we've read. As
Karsten thought we were able to do better. Dropped the timeout by clearing
our queue on shutdown (to unblock any enqueue calls in process), and skip
further enqueuing while we're shutting down.

Both iterating and stopping are under a read lock so we don't need to worry
about this changing the order in which descriptors are provided to callers.
Implementing calculate_digest() for server descriptors

Implementation and test for a function to get the digest value for a relay
server descriptor. This is the same value found in the network status entry.
This was an addition suggested by Karsten.
Renaming calculate_digest() to just digest()
Removing restriction that descriptor socks port is zero

The socks port of server descriptors is depricated and always zero, but this
isn't necessarily true for archives.
Removing integ test for descriptor digests

Dropping the server descriptor integ test for digest(). It was a valiant
effort, but is flaky because it'll always fail when the consensus or descriptor
changes and are out of sync.