Rewrite: Major simplification for 2.0

* Switch to [bluebird](https://www.npmjs.org/package/bluebird) as the core Promise library.  Users can supply their own Promise library by setting the prototype.adapter, as long as it supports: `fulfilled`,`rejected` and `all`.

* Switch to Mocha for testing - easier with promises.

* Each logic function must either return a value or a promise.   `resolve` and `reject` are no longer provided as injected methods.

* The custom `context` has been removed in favor of simply checking the properties of the clues object directly when no facts or logic can be found.   This means `solve`, `self`, `facts` .. .etc can be referenced from any logic function.

* Facts remain as promises, instead of being explicitly converted to value when resolved.   Facts can nevertheless be manually set as values.

* Cancelling any outstanding promise will propagate the cancellation to outstanding parent promises

* methods `all` and `as` removed

* method `solver` added as a simple wrapper around solve, to make it easier to specify 'solve' commands inside `.then()`

* method `fork` allows the generation of a new clues object that shares the logic of the parent, but inherits the facts.   Solving for new facts on the fork will not affect facts in the parent.  Additionally, facts in the fork can be overwritten manually without affecting the parent.