Add better logging for the http response
diff --git a/api/api.go b/api/api.go
index 90c69ff..179d9a3 100644
--- a/api/api.go
+++ b/api/api.go
@@ -95,7 +95,7 @@
 	}
 	return &HTTPConnection{
 		client: &http.Client{
-			Timeout: 10 * time.Second,
+			Timeout:   10 * time.Second,
 			Transport: &http.Transport{TLSClientConfig: config},
 		},
 		credentials: "Basic " + base64.StdEncoding.EncodeToString([]byte(usernamePassword)),
@@ -141,7 +141,7 @@
 }
 
 // sendRequest sets up and sends the relevant HTTP request to the server and returns the HTTP response.
-func sendRequest(rpcName string, req string, conn *HTTPConnection) (*http.Response, error) {
+func sendRequest(rpcName string, req string, conn *HTTPConnection) (string, error) {
 	httpReq, err := http.NewRequest("POST", conn.getURL(rpcName), bytes.NewBuffer([]byte(req)))
 	httpReq.Header.Set("Content-Type", "application/json")
 	httpReq.Header.Set("Authorization", conn.credentials)
@@ -149,9 +149,16 @@
 
 	httpResp, err := conn.client.Do(httpReq)
 	if err != nil {
-		return nil, fmt.Errorf("invalid response. %s yielded error: %v", rpcName, err)
+		return "", fmt.Errorf("invalid response. %s yielded error: %v", rpcName, err)
 	}
-	return httpResp, nil
+	defer httpResp.Body.Close()
+	bodyBytes, err := ioutil.ReadAll(httpResp.Body)
+	if err != nil {
+		return "", fmt.Errorf("Could not read http response body")
+	}
+	bodyString := string(bodyBytes)
+	log.Printf("%v Response. Received(unix): %s, Response %v\n", rpcName, time.Now().UTC().Format(time.RFC850), bodyString)
+	return bodyString, nil
 }
 
 // CheckAvailability beforms a maps booking availability check on all supplied availability slots. This function
@@ -172,14 +179,11 @@
 	if err != nil {
 		return fmt.Errorf("invalid response. CheckAvailability yielded error: %v", err)
 	}
-	defer httpResp.Body.Close()
 	var resp mpb.CheckAvailabilityResponse
-	if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
 		return fmt.Errorf("CheckAvailability: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("CheckAvailability Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
-
 	if diff := cmp.Diff(resp.GetSlot(), slot, cmp.Comparer(proto.Equal)); diff != "" {
 		return fmt.Errorf("invalid response. CheckAvailability slots differ (-got +want)\n%s", diff)
 	}
@@ -223,13 +227,11 @@
 	if err != nil {
 		return nil, fmt.Errorf("invalid response. CreateBooking  yielded error: %v", err)
 	}
-	defer httpResp.Body.Close()
 	var resp mpb.CreateBookingResponse
-	if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
 		return nil, fmt.Errorf("CreateBooking: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("CreateBooking Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
 	if resp.GetBookingFailure() != nil {
 		return nil, fmt.Errorf("invalid response. CreateBooking failed with booking failure %v", resp.GetBookingFailure())
 	}
@@ -249,13 +251,11 @@
 	if err != nil {
 		return nil, fmt.Errorf("invalid response. Idempotency check yielded error: %v", err)
 	}
-	defer idemHTTPResp.Body.Close()
 	var idemResp mpb.CreateBookingResponse
-	if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(idemHTTPResp, &resp); err != nil {
 		return nil, fmt.Errorf("CreateBooking idem: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("Idempotency check -- Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), idemResp.String())
 	if diff := cmp.Diff(idemResp, resp); diff != "" {
 		return b, fmt.Errorf("Idempotency check invalid (-got +want)\n%s", diff)
 	}
@@ -277,13 +277,11 @@
 	if err != nil {
 		return nil, fmt.Errorf("invalid response. ListBookings yielded error: %v. Abandoning all booking from this flow", err)
 	}
-	defer httpResp.Body.Close()
 	var resp mpb.ListBookingsResponse
-	if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
 		return nil, fmt.Errorf("ListBookings: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("ListBookings Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
 	gB := Bookings(resp.GetBookings())
 	if len(gB) != len(tB) {
 		return out, fmt.Errorf("number of bookings differ, ListBookings invalid. Got: %d, Want: %d. Abandoning all bookings from this flow", len(gB), len(tB))
@@ -316,13 +314,11 @@
 	if err != nil {
 		return fmt.Errorf("invalid response. GetBookingStatus yielded error: %v", err)
 	}
-	defer httpResp.Body.Close()
 	var resp mpb.GetBookingStatusResponse
-	if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
 		return fmt.Errorf("GetBookingsStatus: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("GetBookingStatus Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
 	if diff := cmp.Diff(resp.GetBookingStatus(), mpb.BookingStatus_CONFIRMED); diff != "" {
 		return fmt.Errorf("invalid response. BookingStatus differ (-got +want)\n%s", diff)
 	}
@@ -344,13 +340,11 @@
 	if err != nil {
 		return fmt.Errorf("invalid response. UpdateBooking yielded error: %v", err)
 	}
-	defer httpResp.Body.Close()
 	var resp mpb.UpdateBookingResponse
-	if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
 		return fmt.Errorf("CancelBooking: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("UpdateBooking Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
 	if iE := utils.ValidateBooking(resp.GetBooking(), reqPB.GetBooking()); iE != nil {
 		return fmt.Errorf("invalid response. UpdateBooking: %s", iE.Error())
 	}
@@ -392,13 +386,11 @@
 		return fmt.Errorf("Rescheduling UpdateBooking: Could not convert pb3 to json: %v", reqPB)
 	}
 	updateHTTPResp, err := sendRequest("UpdateBooking", req, conn)
-	defer updateHTTPResp.Body.Close()
 	var resp mpb.CreateBookingResponse
-	if err := jsonpb.Unmarshal(updateHTTPResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(updateHTTPResp, &resp); err != nil {
 		return fmt.Errorf("Rescheduling UpdateBooking: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("UpdateBooking Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
 	if iE := utils.ValidateBooking(resp.GetBooking(), newBooking); iE != nil {
 		return fmt.Errorf("invalid response. UpdateBooking: %s, abandoning slot 1/1", iE.Error())
 	}