Support for read-only geo commands

This set of changes implements the base read-only support for geo (directional) records.

This supports issue #90 and is discussed on the [google group](https://groups.google.com/forum/?hl=en&fromgroups=#!topic/denominator-dev/oddeyVWDCiI)

#### ResourceRecordSet + profiles
This adds to `ResourceRecordSet` a list of profile maps, where the key `type` is set to a well-known value, typically the lowercase name of the profile.  For example, `Geo` extends from map, and its value of `type` is `geo`.  A client sees at most one ResourceRecordSet for a record name and type using tools like dig.  Profiles control controls the conditions under which the records is visible to the client.  Hence, `ResourceRecordSet` with different profiles are meaningfully distinct and may repeat for the same name, type query.

#### Geo
This introduces a new type called `Geo`.  This type contains the following fields:
  * name: group name chosen by the user. ex. `US-East`
  * regions: subset of regions defined by the system.  ex. `"South America" :["Colombia", "Ecuador"...` in ultradns

### GeoResourceRecordSetApi
optionally exposed if the provider supports it.  Similar to `ResourceRecordSetApi`, except that name and type are ambiguous.  For example, there could be a separate rrset for the CNAME www.foo.com. for US-East and US-West profiles.

#### getSupportedTypes()
record types supported for geo configs are typically a subset of normal records.  We need to expose what is supported, so that those attempting to list across all types can safeguard their code.

#### getSupportedRegions()
There are [many differences](https://gist.github.com/adriancole/5454927) between ultradns and dynect region codes.  This will help validate changes that would otherwise result in errors, such as mis-spelling `Alabama` as `alabama`

### AllProfileResourceRecordSetApi
There are significantly more web service operations required to aggregate all record sets on most providers.  Typically, there's an operation to list normal record sets, and then a series of operations to query specialized pools used for geo-config.  The `AllProfileResourceRecordSetApi` is introduced for a couple reasons.  One is that we don't want to complicate portability and coding of "normal" denominator providers by renaming `ResourceRecordSetApi` to `NormalResourceRecordSetApi`.  Further, since profiles can allow for duplication on the query `[name, type]`, we cannot support the method `ResourceRecordSetApi.getByNameAndType` safely, and instead have to allow it to expose duplicates via `AllProfileResourceRecordSetApi.listByNameAndType`.  For example, the site `www.denominator.io` of type `CNAME` could be ambigious, if it had a profile for multiple regions, such as `US-West` and `EU-West`.  Since profiles make life a little more difficult, and this complexity isn't valid for "normal" records, we left `ResourceRecordSetApi` alone, and added an similarly named class to expose "all" stuff.

### Command-line
The command-line has been extended to add operations for the group `geo`.
```
$ denominator -p mock geo -z denominator.io. types
A
CNAME
$ denominator -p mock geo -z denominator.io. regions
Anonymous Proxy (A1)        : Anonymous Proxy
Satellite Provider (A2)     : Satellite Provider
Unknown / Uncategorized IPs : Unknown / Uncategorized IPs
United States (US)          : Alabama;Alaska;Arizona;Arkansas;Armed Forces Americas;Armed Forces Europe, Middle East, and Canada;Armed Forces Pacific;California;Colorado;Connecticut;Delaware;District of Columbia;Florida;Georgia;Hawaii;Idaho;Illinois;Indiana;Iowa;Kansas;Kentucky;Louisiana;Maine;Maryland;Massachusetts;Michigan;Minnesota;Mississippi;Missouri;Montana;Nebraska;Nevada;New Hampshire;New Jersey;New Mexico;New York;North Carolina;North Dakota;Ohio;Oklahoma;Oregon;Pennsylvania;Rhode Island;South Carolina;South Dakota;Tennessee;Texas;Undefined United States;United States Minor Outlying Islands;Utah;Vermont;Virginia;Washington;West Virginia;Wisconsin;Wyoming
--snip--
$ denominator -p mock geo -z denominator.io. list
www.geo.denominator.io.                           CNAME  0     c.denominator.io. antarctica {Antarctica=[Bouvet Island, French Southern Territories, Antarctica]}
www.geo.denominator.io.                           CNAME  300   a.denominator.io. alazona {United States (US)=[Alaska, Arizona]}
www.geo.denominator.io.                           CNAME  86400 b.denominator.io. columbador {South America=[Colombia, Ecuador]}
www2.geo.denominator.io.                          A      300   192.0.2.1 alazona {United States (US)=[Alaska, Arizona]}
```

### Unsupported
  * noResponse: explicitly answers that the record is not present for the regions applied
  * unconfiguredRegions: we just enumerate the territories as opposed to making a special group, so far.
  * region -> territory value portability.  There are [many differences](https://gist.github.com/adriancole/5454927) between ultradns and dynect region codes.  The effort to make them portable is out of scope for this pull request.