modify the extensions to allow building as well as parsing (start #38)

This is essentially a copy and slight refactor of the code that resides
in R509::CertificateAuthority::Signer#build_extensions. Tests have not
been ported and yardoc is non-existent. I'm not 100% sure this is the
direction I want to go, but it's moderately promising.

With this r509 can potentially allow you to pass an array of pre-built
extensions to the signer rather than having the signer parse the config
and profiles and build them itself.

The biggest problem with the current setup is that each object can take
very different arguments in the constructor. For example, to build an
OCSPNoCheck extension you just do

R509::Cert::Extensions::OCSPNoCheck.new

and SAN:

R509::Cert::Extensions::SubjectAlternativeName.new(['cnn.com','127.0.0.1'])

and subjectKeyIdentifier

R509::Cert::Extensions::SubjectKeyIdentifier.new(:public_key =>
subject_public_key)

and AuthorityKeyIdentifier

R509::Cert::Extensions::AuthorityKeyIdentifier.new(
  :issuer_certificate => r509_cert_obj,
  :value => "keyid:always")
uses R509::MessageDigest::DEFAULT_MD rather than 'sha1' everywhere
update messagedigest to allow default creation

Previously r509 specified a default md as fallback in several separate
places. This modification allows it all to reside within a single class
and simplifies the code in several other places
simplify MessageDigest creation in CSR.new

Leverages previous MessageDigest default improvement
simplify MessageDigest creation in SPKI.new

leverages previous MessageDigest improvements
update R509::ASN1.general_name_parser

The method now supports passing an existing GeneralNames object, which
will just be returned back unaltered. This simplifies code in several
places.

Also updated the yardoc on the CSR object to reflect the fact that you
can (thanks to the parser change) pass a GeneralNames object for
:san_names
Modify R509::Config::CAProfile & CAConfig (more work on #38)

This commit renames CAProfile to CertProfile. It also moves the
following fields to CertProfile from CAConfig:
-default_md
-allowed_mds
-cdp_location
-ocsp_location
-ca_issuers_location

This is a (big) breaking change, but there are more to come.

The test YAMLs were also modified to support the new formats
initial pass on a ProfileEnforcer. branch still broken, deal with it

CertificateAuthority::Signer still needs to be refactored and committed.

Tests still needed for new Signer and for all the extension creation
code in R509::Cert::Extensions::* (much of this can come from the old
Signer tests)
profile enforcer now takes a single hash for #enforce
refactor Signer and tests (more massive refactoring for #38)

This refactor completely changes the behavior of the Signer. It now
takes a limited # of options in the hash and assumes you've built your
extensions prior to calling the signer. You can either build them
manually or use the ProfileEnforcer to create them.

Also included are some README updates.

Test coverage around the extension creation will be improved next
added test coverage for all extensions + much more

Modified a bunch of the keys to be symbols rather than
strings for better consistency in the API. This changes
the YAML as well (sorry).

Extension creation now allows specification of criticality
Validation in CertProfile moved to a validation mixin

Still to come:
-README and YAML updates and more YAML changes
-Leverage ValidationMixin in extension creation to
  give friendly errors there if you pass bad hashes
-GeneralName(s) refactor?
fix r509 binary to use changed selfsign method
update selfsign to add basicConstraints defaulting to CA:TRUE if no

extensions array is passed
change engine keys to symbols for consistency with the rest
update yaml files for tests/use #to_yaml output
major documentation updates & more

added validation of input for extension creation
allow passing of R509::ASN1::GeneralNames objects for
-cdp_location
-ocsp_location
-ca_issuers_location
in R509::Config::CertProfile
fix and test for #41
add license info to gemspec to quell the warning. [ci skip]
Merge branch 'extensions-builder' of github.com:reaperhulk/r509 into extensions-builder

* 'extensions-builder' of github.com:reaperhulk/r509:
  fix and test for #41
change the default for authorityKeyIdentifier in the CRL extensions

The need for this extension is pretty questionable so it might be better
to just remove it long term. Or else make CRL extension generation
configurable...but that really amps up the complexity for users