Major additions and improvements

+ Added read-only protocol version to BaseClient;
+ Added handshake requests and responses to pass on data - Non-matching
protocol versions cause connection drop;
+ Added optional peering mechanism - a client knows its peers (integers,
for client IDs) at all time;
+ Added method to list IDs of clients and indexer to vProto.BaseServer;
+ Added an abstract base class for RMI services called
vProto.RMI.BaseService, which provides service executed methods with a
fully thread-safe and thread-local reference to the invoking
vProto.BaseClient object - this class acts like an OPTIONAL addition to
RMI services;
+ Finally enforced a maximum of 3 consecutive heartbeat failures in
code;
> Handshake errors count as connection failures;
> Connection success events run on handshake completion now;
> Peer (dis)connection is now handled by specific message types instead
of internal requests - these don't need any feedback;
> vProto.Packages.PackageType enumeration is now based on byte instead
of uint - it doesn't need that many package types anyway;
> Added locks over client array in server speed-counting logic;
> Drastically improved performance by changing the Thread.Yield() call
in package sending thread loop to a Thread.Sleep(1).

Upon handshake, the current peer list is sent to the client. Each
subsequent peer addition/removal is sent in a bodyless package.
Handshake data is held in small classes which are binary-serialized.
This is used for future versioning and convenience.