Client and Request

Implemented the CanadaPost\Client and CanadaPost\Request classes.

The CanadaPost\Client makes Canada Post XML API requests by using the XML, method, URL, et cetera provided to it by an object which extends CanadaPost\Request, which provides sensible defaults for its methods.

This means that the CanadaPost\Client is responsible for HTTP requests and error handling, while the CanadaPost\Request subclass is responsible for managing data serialization, endpoint selection, and response parsing.
Get Rates Request

Implemented the CanadaPost\GetRatesRequest class -- a subclass of CanadaPost\Request -- which creates requests to get shipping price quotes from the Canada Post XML API.

Also implemented several supporting classes.

The CanadaPost\GetRatesRequest class is not yet capable of parsing the XML response which actually contains the requested quotes.
DOMWrapper

As the Canada Post API will do a substantial amount of XML parsing, wrote a wrapper class which will make parsing the DOM substantially easier.

The \CivicInfoBC\DOMWrapper class wraps a \DOMNode, and provides several utilities for that node:

- Iterate its children, with or without filters (may filter based on tag name of children, or on whether or not they are \DOMElements)
- Retrieve the first child with a certain tag name, coalescing to some default value or throwing if it does not exist
- Check if a child with a certain tag name exists
- Retrieve an attribute, coalescing to some default value or throwing if it does not exist
- Check if an attribute exists
CanadaPost\Client Update

Updated the CanadaPost\Client class to use the DOMWrapper class internally (for parsing error message structures).  This greatly simplified the code.
CanadaPost\Client Documentation

Added documentation for the CanadaPost\Client::Execute method.
CanadaPost\Client Fix

Fixed a small bug with the CanadaPost\Client class: In the Execute method, the CanadaPost\Request object's GetContentType method was being called, and the "Content-Type" header was being set even if the HTTP verb was not "POST", in which case the header is irrelevant (and the GetContentType method is liable to return meaningless garbage which the Canada Post XML API may reject).
CanadaPost\Client User Agent String

The CanadaPost\Client class now sends the user agent string "CivicInfoBC Canada Post REST API Client" on all HTTP requests.
Convert::ToFloat

Added functions to the Convert class to enable safe conversiot to float.  They function identically to the corresponding functions for integers:

- ToFloat returns the input as a floating point value, or the supplied default if the input does not represent a floating point value
- ToFloatOrThrow returns the input as a floating point value, or throws an exception if the input does not represent a floating point value
CanadaPost\GetRatesRequest Style Change

Changed a few lines of code in the CanadaPost\GetRatesRequest due to style issues.
Convert::ToBoolean

Added functions to the Convert class to convert strings into booleans.  These functions follow the patterns established by Convert::ToInteger and Convert::ToFloat.
Convert::ToDateTime

Added functions to the Convert class to convert strings to DateTime objects.  These functions follow the same pattern as established for other functions of the Convert class.
Get Rates Response

Added classes and functionality so that the response to a CanadaPost\GetRatesRequest can be parsed and represented.
Merge branch 'canada_post'

It is now possible to request and receive shipping quotes.