Merge branch 'release/0.4' into develop

* release/0.4:
  Increase version number
  Documentation update
Merge branch 'hotfix/0.4.0.1' into develop

* hotfix/0.4.0.1:
  Documentation fix
Refactoring and extra debugging

Refactored the decryption method in util.Crypto to accept a
keystore.Key as a parameter (makes more sense). Also refactored the
`decryptData` method of token.Token to use the decryption method in
util.Crypto (instead of repeating the same code in multiple places).
Finally, some extra debug logging was aded that I needed to solve
an implementation problem.
Merge pull request #12 from jsumners/develop

Refactoring and extra debugging
Oops. Logging was copied to the wrong place.

I accidently copied the logging from the Token decryption method
to the wrong place in the Crypto decryption method. Sorry about that.
Merge pull request #13 from jsumners/develop

Oops. Logging was copied to the wrong place.
Adds two new features: optional/required attributes and attribute mapping

Both of the features complement each other. Thus the single pull request.

The first feature adds the ability to define which attributes are
required in the `credentials` object of the encrypted JSON. This has
the side effect of also allowing any attributes to be passed in via
the `credentials` object such that those attributes will be available
to the CAS attribute repository (as they are named in the `credentials`
object). This resolves bug #1.

The second feature adds the ability to map property names of the
`credentials` object to the properties of a TokenAttributes instance.
Thus, the `credentials` object could have a property named
"sAMAccountName" and this feature can be used to map that to the
"username" property of the TokenAttributes instance for the request.
The only time this mapping is required is when the username property
is renamed.

When implementing this add-on I discovered that I could not map the
attributes for services using this add-on to the properties we use
from our primary authentication source (Active Directory). So this
is my solution to that problem.

Note, this changes the point at which your "ProviderName" ("UsfNetId")
would be added to the attributes list. If this patch is accepted, you
would have to add that attribute in the JSON you send to the CAS server.
Merge pull request #14 from jsumners/attrs_rework

Adds two new features: optional/required attributes and attribute mappin...
Adds missing check for valid attributes

It seems that I forgot to add a check to make sure the decrypted
token has all of the specified required attributes. This commit
fixes that oversight.
Merge pull request #15 from jsumners/attrs_rework

Adds missing check for valid attributes
Increase version number
Documentation update
Merge branch 'release/0.5.0'

* release/0.5.0:
  Documentation update
  Increase version number
  Adds missing check for valid attributes
  Adds two new features: optional/required attributes and attribute mapping
  Oops. Logging was copied to the wrong place.
  Refactoring and extra debugging