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).
Any reason in the inconsistency with how these objects are created and returned (versus say createBoostrapRequest)?