New class ConnectionProperties, removes hard-coded connection info

AGithub's "API transparency" means it could become quite usable with
many other REST APIs; but it has several hard-coded bits which refer to
the GitHub API. The new ConnectionProperties class paves the way to
genericity, by allowing us to abstract over the details of individual
REST APIs.

New class ConnectionProperties
    - which is now threaded through the Client initialization code

Client.get_connection()
    - The API base URL is now a member (api_url) of
      ConnectionProperties, rather than a hard-coded constant, in
      Client.get_connection().
ConnectionProperties (secure_http): Allow non-secure connections

Some APIs may not be available over HTTPS like GitHub's. We want to
support those, too.

Add secure_http connection property, which determines whether to use
HTTP or HTTPS
Client.get_connection(): Do not allow authenticated sessions over HTTP

Trying to authenticate over a non-secure channel is almost certainly a
mistake. Therefore, we make it as inconvenient as possible to do so.
Add extra_headers to ConnectionProperties

Every API will have a different set of application-specific headers
specific to it. For GitHub, this includes (only) the accept header.

Add extra_headers slot to ConnectionProperties
    - intialize Client._default_headers with this dict within __init__
    - Pass GitHub's accept header via this mechanism, moving it from the
      "global" _default_headers to the per-client _default_headers
Enforce case restrictions (lowercase) in Client.default_headers

Since we're already mutating self.default_headers from Client.__init__,
we ought to enforce the case restrictions we rely on. This is especially
important since the new API flexibility (à la ConnectionProperties)
will soon allow user-code to add support for their own APIs.
New method Client.setConnectionProperties()

We want a special, santioned way to pass ConnectionProperties to a
Client, rather than kludging it into the __init__() args. We also gain a
way to reset the connection properties later, or to delay setting them
innitially.

Add Client.setconnectionproperties(), which sets (or resets) the default
headers to use for future requests.

Do not modify Client._default_headers. Instead, use a new
Client.default_headers variable; this allows setConnectionProperties to
be idempotent, starting from the same dict of default headers each time.
Client.__init__: Do not force ConnectionProperties to be passed early

Client:
    - Allow setConnectionProperties to be called after __init__

Github:
    - Call setConnectionProperties after calling Client(). This makes it
      clearer what we're doing
New class API: Toplevel API object

This class is the superclass for Github (and any new REST clients we may
invent). It add the setClient and setConnectionProperties methods (to
Github) to solidify the external API for setting up these things. This
makes it much easier to create new subclasses, since the __init__() can
consist of merely 2 method calls.
New REST API: SalesForce

It can at least connect to SalesForce's REST API anonymously. May also
work for authenticated connections. Works with json, but (currently),
not XML.
Add class for Facebook's graph API

To get this to properly decode the (text/javascript) return values, we
have to trick the Content class into thinking it's the same as
application/json. Time (and someone who knows the Facebook API better
than me) well tell whether this is adequate and handles all cases.
Add ChangeLog
Tweak README

    - Add &ndash; in date range
    - Misspelling of "Not Found"
Remove TODO file. It has been superseded by the ChangeLog

The important TODOs have already been migrated to the new change-log.

The other stuff is so old and contextual that I don't even remember what
I was thinking about. (Whatever cool features they were, someone might
think to do them someday.)