Reduce, Reuse, Recycle.

From lib/axiom...

bind.js:
* Moved into main.js

bindings/base.js:
* Verify typeof function on method binds.
* Add map type.
* Add ability to define a "first" function to be called on method endpoints.
  This lets the binding set up some default action that happens before the
  to-be-bound method is invoked.  Remove fast-path code to simplify the
  permutations.
* Make closeErrorValue coerce any argument into an AxiomError if it isn't
  already.
* Make closeErrorValue return the AxiomError so that it can be used to reject
  a promise as well.

bindings/extension.js:
* Large refactor, it's a rewrite essentially.
* Add a static `subclass` method which returns an ExtensionBinding subclass
  tailored to a specific service.

bindings/service.js:
* Large refactor, it's a rewrite essentially.
* Use Maps and Sets instead of raw Objects and Arrays.
* Create and store a service specific ExtensionBinding subclass.
* Track the extensions applied to the service.

core/err.js:
* Move to error.js

core/extension.js:
* Refactored into bindings/extension.js

core/module.js:
* Refactored into bindings/module.js

core/module_manager.js
* Use Maps and Sets instead of raw Objects and Arrays.
* Refactor to use the Module/Service/Extension binding classes.

core/service.js:
* Refactored into bindings/service.js

core/service_manager.js:
* Removed.  Services are now scoped to Modules, so there's no need for a global
  ServiceManager.  The ModuleManager provides a getServiceBinding method which
  can look up a service given a "module-service-id" of the form
  "service-id@module-id".

descriptor.js:
* Rename the module to 'axiom'.
* Filesystem/commands/views descriptor churn.

main.js:
* Consolidate bind.js code into this module.

services/commands/command_manager.js:
* Refactor to match Module/Service/Extension binding shakeup.