Unifying Client Requests with Server style

This PR is a refactor of the client in preparation for the start of implementation of bootstrap.  I wanted to unify the style of the requests so they mimic those of the server both in use (e.g., LeshanClient.send(request)) and design (visitor and builder patterns, many pulling heavily from the stuff on the server).
Because only Registers the spec return a location (aka a ClientIdentifier) in the response options that should be used in all future requests (Updates and Deregisters). I could have had 'null' returned in the case of the other requests but I thought that would be ambiguous.  Rechecking the spec it seems Request Bootstrap doesn't return a location either so I will remove that and replace it with a runtime exception so users know that it isn't fully implemented yet.