migrated to JGroups 3.x, removing support for block event
Bumping version to 0.7 to make API changes.
Avoid raw types.

The main impact is in changing the public interface of MembershipID,
that now extends Comparable<MembershipID>.
Removed support for Spread < 4.0.
Clarify the meaning of order in MembershipIDs.

View identifiers in partitionable protocols cannot usually
fully express the partial order among views. Nonetheless,
they can still express order among successive views when
there are not partitions. This is now implemented properly.
Removed Marshallable interface and implementations.

This is better served by standard Serializable.
General cleanup of serializable support.

The following classes have been made serializable (either with
Serializable or with Externalizable, as appropriate):

 - Service
 - GroupConfiguraton
 - ProtocolFactory
 - Message
 - MembershipID
 - SocketAddress (implementations only)

This allows configurations to be stored persistently, for communication
state to be logged (including messages, view ids, and addresses), and
exchanged in messages in a protocol independent fashion.

In addition, all serialVersionUIDs of these classes have been set
to 2L (as some have been previously labeled as 1L).
Fix javadoc tags.
Remove message cloning from MultipleListeners adapter.

This isn't likely to be ever necessary (why change the message being
received and not create a fresh one?) and implies that setSender in the
message must be public.
Removed setSenderAddress from Message.

There is no point in having this as a public API method. This is supposed
to be set within the protocol.
Clarified partial order of services.

Made it clear that services are not necessarily totally ordered. And they
don't need to be. The old compare method was much to similar to Java's
Comparable.compareTo(), that assumes such total order.
Removed implementation of Comparable from MembershipIDs in partitionable
protocols.

It turns out it was wrong, even after commit 4b63f206a17564ede68bb5d979ac.
In fact, partitionable protocols don't provide a simple way to fully
implement it and thus jGCS shouldn't do it itself.
Drop util.Mailbox, using juc.BlockingQueue instead.
Change pacakge structure.

First, move everything from the membership package to the main package. There is
no point in having a separate package for this when all protocols targetted by
jGCS will implement it.

Second, move abstract implementations from main package to a new spi package. This
mimics the structure of java.nio hierarchy, in which service provider infrastructure
is separated from the interfaces. This clearly identifies what interfaces end-users
should be concerned with.
Removed ControlListener.

This was redundant and only caused confusion, mainly, regarding concurrency.
If your application depends on this, just register a MembershipListener
with the following content:

	for(SocketAddress addr: memb.getLeavedMembers())
		notifyLeave(addr);
	for(SocketAddress addr: memb.getFailedMembers())
		notifyFailed(addr);
	for(SocketAddress addr: memb.getJoinedMembers())
		notifyJoin(addr);
Updated README
Remove DataSession.send() and make use of Annotations.

Sending a message to a specific member of the group is offered by some
protocols, but not by all. Having this method encouraged non-portable
code.

The alternative is to consider message targetting as an optional
optimization. Applications should not depend on it, but can use
it while being portable.

The same thing for self-delivery (e.g. in Spread) that so far
was not supported.
Made spi.Abstract* classes generic.

This includes having references between data and control sessions,
the protocol instance, and group configuration. This allows removing
quite a bit of duplicate code in bindings.
Removed AbstractMultiThreadedPollingProtocol.

This produces the same result as the AbstractPollingDataSession and
is not used by any existing binding.
Make protocols and sessions Closeable.