add urandom engine and set it as default RAND method.

This is a proposed solution to the OpenSSL fork problem.
allow the backend to register/unregister the engine via methods
add urandom engine register/unregister tests

also rename some variables in the urandom engine for easier comparison
fix fd int check, remove stray comedy printf()
remove unneeded INT_MAX check
additional check to verify the ENGINE_new doesn't return null
Add dummy engine to tests and test other engine scenarios

Modify register_urandom_engine to fix a leak
improve init/finish engine funcs, do a better job inc/dec struct/func refs
check if the fd is available via engine status
remove inaccurate comment
rename urandom engine to osrandom engine
remove stray break, add FD_CLOEXEC, reset fd var even if close fails
Merge branch 'master' into urandom-engine

* master:
  Split OpenSSL binding
  Fixed test for earlier exceptino
  Rearrange
  Move GCM tag size/value validation farther forward -- this makes it easier by not requiring future backends to implement the same checks
  expose num_locks and {get,set}_{id,locking}_callback
  Make the PyPy tox job consistent with the main one.
  THis should be a seperate PR
  Typo fix
  This page has been subsumed by the index
  Bump the copyright year
  Document compiling OpenSSL to avoid conflicts

Conflicts:
	cryptography/hazmat/backends/openssl/backend.py
Merge branch 'master' into urandom-engine

* master:
  Revert "Travis now has an up to date pypy"
  Make capitalization in the glossary consistent and sort it
  Make lib and ffi be private on backend
handle lib/ffi on backend becoming private
Merge branch 'master' into urandom-engine

* master: (169 commits)
  Make just one call to ffi.cdef for most of the definitions
  Use pytest.fixture for backends
  drop to >= 0.8 to make pypy happy
  change to anonymous enum
  require cffi >= 0.8.1
  remove extraneous spaces
  add hmac to commoncrypto binding
  bytes byte back
  add check to confirm we've loaded error strings
  Bind all the PEM errors
  Spelling!
  oops, bytes plz
  don't leak a context in the test
  add tests to the openssl backend to verify that we've registered
  Nonsense I think we need.
  This is a dep
  init the ssl library in the backend
  Actuall install a thing
  Try to run the spellchecker on travis
  Use a normal quote here, not sure where the smart quote came from
  ...

Conflicts:
	cryptography/hazmat/bindings/openssl/binding.py
	tests/hazmat/backends/test_openssl.py
Merge branch 'master' into urandom-engine

* master: (58 commits)
  Moar backtick.
  Add to changelog.
  move some dashes around :)
  experiment to disable duplicate cc test runs on osx and speed up travis
  Remove register_cipher_adapter from the interface and the documentation.
  expand tox backend example
  On OS X at build time compile the CC bindings
  remove an extraneous linefeed
  reformat bindings and remove GCM for the moment
  add cipher bindings for CommonCrypto
  doc updates
  hmac support for commoncrypto
  added versionadded
  changelog to note addition of commoncrypto backend with hash support
  fix docs
  doc updates
  update docs for name attribute
  fix copy mistake in docs
  increase indent and note the value of the attribute in the docs
  move HashMethods to top level
  ...
first pass at adding docs for the engine.

lvh has graciously agreed to draft some language to explain the
rationale behind choosing the system random over userspace rand
Merge branch 'master' into urandom-engine

* master: (108 commits)
  PBKDF2HMAC requires a PBKDF2HMACBackend provider.
  one more replacement
  simplify hmac supported and hash supported calls for commoncrypto
  simplify check for algorithm
  a bit more language work + changelog changes for pbkdf2hmac
  one more style fix
  a few typo fixes, capitalization, etc
  switch to private attributes in pbkdf2hmac
  expand docs to talk more about the purposes of KDFs
  update docs re: PBKDF2HMAC iterations
  add test for null char replacement
  Added installation section to index.rst
  called -> used
  quotes inside, diff examples
  Expose this method because probably someone will need it eventually
  fix spacing, remove versionadded since HashAlgorithm was in 0.1
  document HashAlgorithm
  Added canonical installation document with details about various platforms, fixes #519
  update docs for pbkdf2
  Add bindings for X509_REQ_get_extensions.
  ...

Conflicts:
	cryptography/hazmat/bindings/openssl/binding.py
	docs/hazmat/backends/openssl.rst
update random engine docs