Added username
Improve clean up handling

The clean up handling works with the GC to avoid memory leaks if connections
are kept open for a long period of time.

LibVirtAdapter maintains a set of weak references to the allocated LibVirtDomain
objects.  This allows the GC to collect the LibVirtDomain object if they are
no longer strongly reachable.  LibVirtAdapter also maintains a set of Domain
object which must be freed before closing the connection.

When the GC finalizes a LibVirtDomain object this frees the underlying
Domain object and removes the LibVirtDomain from the Domain set.

When close() is called, any Domain objects left in the set are explicitly freed,
ensuring that all underlying pointers are freed before the connection is closed.