add dylib as a valid shared library extension

add a die flag to zmq_soname to toggle exceptional behavior (cleans up
duplicate tracking of possible libzmq sonames)

add related unit tests
add versioned dylibs
force init error bindings before doing anything

when checking zmq_errno on OS X the loader may clobber any errno already
set by zeromq if the bindings are allowed to load lazily.
codebase refactor

- use Roles only to describe public api, not for common implementation
- put common implementations int Base classes, leave non-common
  functions as unimplemented stubs (which die)
- have Base classes consume roles, for clarity and coherence when trying
  to determine where functionality comes from/is implemented
- have ABI specific implementations simply extend base classes and
  implement non-common stubs
- misc code reorg
- add some comments for non obvious attributes
- mark internal ffi hash private (i.e. _ffi)
force init error handler in contexts as well
DEMOLISH methods are now in base classes

Don't have to dynamically override, just explicitly override base class
demolish in test
more refactor

- add more symmetry between the context/socket base/role class hierarchy
- kill sowrapper role and instead split into separate
  Versioner/ErrorHandler roles
- create ErrorHelper class that has the actual bindings/methods for
  accessing the zmq error functions and pass this as an attribute to
  context/role objects (has-a instead of is-a relationship)
- instantiate ErrorHelper instance before doing anything else in
  ZMQ::FFI constructor... ensures errno bindings are loaded first and
  prevents OS X errno clobber bug
- some variable renames and reorg
still need to force init err ffi bindings

but now only need to do it once in the ErrorHelper BUILD method