Making ConnectionPoolBuilder immutable

This is in support of the goals outlined in #303. All modification methods should now return a new `ConnectionPoolBuilder` thereby avoiding some of the problems I encountered when I first tried to see what an immutable `HttpClient` would look like. Hope this the type of help you were looking for @NiteshKant