Refactor domain event handling

Refactor the domain event handling, with the aim of reducing verbosity
and simplifying the API.

Specific methods have been added to the Connect and Domain objects to
subscribe to individual events, rather than using the C style enum.

Rather than encapsualting the binding logic in the DomainEventID.  The
binding logic is encapsulated in the DomainEventHandler classes.  The
DomainEventID is now just a plain enum.  This should make it simple to
implement support for additional events, and even allows the user to
add support for events not yet supported by the bindings.

Subscribing to events, is now a case of:

con.domainLifecycleEventRegister(new DomainLifecycleEventHandler() {
    public void onStarted(Connect connection, Domain domain, DomainEventType event, DomainEventStartedDetailType detail) throws LibvirtException {
	System.out.println("Got start event: " + event + "::" + detail + " for domain " + domain.getName());
    }

    public void onStopped(Connect connection, Domain domain, DomainEventType event, DomainEventStoppedDetailType detail) throws LibvirtException {
	System.out.println("Got stop event: " + event + "::" + detail + " for domain " + domain.getName());
    }
});

con.domainEventRegister(new DomainRebootEventHandler() {
    public void onEvent(Connect connection, Domain domain) throws LibvirtException {
	System.out.println("Got reboot event for domain " + domain.getName());
    }
});

It is also now possible to subscribe to events for a specific domain from the Domain object.