XML Library Usage

Instead of creating XML responses by concatenating strings,XML is instead built using the `javax.xml` library. Created an `XmlDocument` class that handles creating documents and serialising them to strings, along with some helper functions. The following classes extend `XmlDocument` to do something specific:
 - `ErrorResponseXmlDocument`
 - `ListBucketsXmlDocument`
 - `ListObjectsXmlDocument`

As well as that I re-factored a few things:
 - Made a `Server` base class that `S3Server` extends, which separates out non S3 specific stuff (such as binding to a random port, getting query parameters, reading request data, adding headers etc), so that `S3Server` only contains code that directly relates to S3
 - Standardised indenting
 - Improved valid bucket names test by actually trying to create buckets, rather than calling a `protected` function on `S3Server`
 - Removing author type comments from files
 - Improved some variable names
 - Other general tidying up
You can remove it without the client crashing when calling `listBuckets()`, but if any user of the library had logic that relied on the creation date, then without it a call to `bucket.getCreationDate()` would return null. It's not wrong for a user to use the creation date, there should be a test to assert that the creation date is not null. Could add this to `ListBucketsTest`:
```java
List<Bucket> buckets = client.listBuckets();
List<String> bucketNames = new ArrayList<>();
for(Bucket bucket : buckets) {
    bucketNames.add(bucket.getName());
    assertNotNull(bucket.getCreationDate());
}
```