remove unnecessary Py_INCREF() which caused refcount errors
Context_cc_default: remove redundant lookup of krb5_context
Context_rc_default: remove redundant lookup of krb5_context
Context_kt_default: remove redundant lookup of krb5_context
replace buggy PyCObject_AsVoidPtr() usage with helper functions

Introduce helper functions to abstract away this buggy pattern
of code which is present throughout krb5module.c:

   PyObject *tmp;
   krb5foo foo;

   tmp = PyObject_GetAttrString(object, "_foo");
   foo = PyCObject_AsVoidPtr(tmp);

The above leaks a reference to tmp, and uses PyCObject (deprecated in
Python 2.7)

Introduce the following helper functions to do the above properly (fixing
the reference count issue):

  Context_get_krb5_context
  AuthContext_get_krb5_auth_context
  Principal_get_krb5_context
  Principal_get_krb5_principal
  CCache_get_krb5_ccache
  RCache_get_krb5_rcache
  Keytab_get_krb5_keytab

and replace the coding pattern described above with calls to the above,
throughout krb5module.c
introduce make_class helper function

introduce make_class helper function and use it to replace the copy-and-pasted
insides of all of the various pk_*_make_class functions
 - add the Credentials class, to encapsulate krb5_creds
 - implement the mapping protocol in the CCache class
 - encapsulate all logic for iterating over CCache contents into a CCacheIter class
 - use the CCacheIter class to fill out the mapping protocol on the CCache class
don't cache the default RCache, since freeing a Credentials object will free any associated rcache
use an RCache specific to the service we're connecting to, rather than the default
support retrieval of the RCache object from an AuthContext
support passing a CObject which wraps an existing krb5_rcache into RCache.__init__()
replace uses of PyEval_* with lower-level APIs
support retrieving credentials by Principal or service name
suppport retrieval of the address list from a Credentials object
suppport retrieval of the keyblock from a Credentials object
suppport retrieval of the authdata list from a Credentials object
don't allow setting attributes that are retrieved from krb5_creds