Promise: convenience methods

.kept(), .broken(), and .eitherWay() for what amounts to .done(),
.fail(), and .always(), albeit with different semantics.

The jQuery methods accept any number of arguments and do not return a
new promise object (due to it being impossible to return a single new
promise when given multiple callbacks).

nbd's .kept, .broken and .eitherWay methods are NOT context safe, unlike
its .resolve, .reject and .then methods. They are all convenience
wrappers for .then. They DO return a new promise. They DO NOT take
multiple arguments.

The concept of a promise chain is more important to nbd promises than
jQuery Deferreds, therefore we make the effort to keep the chain going.
If jQuery's behavior is desired, you can still use .promise() to get a
context safe object that behaves like $.Deferred.

Fixes #46
trait/promise: remaking a constructor

No reason why trait promise can't still be a constructor, even though
its promise implementation is now in nbd/Promise.
Merge pull request #55 from Aintaer/promises

Promise: convenience methods
util/diff: checking arrays

Use object recurse loop to loop through arrays to check array elements
as well.
Controller/Entity: serializing Model

Provides a .toJSON() so that the controller instances can be serialized.
Model: change detection of arrays

Only if the array is a direct property of the model data object.

Fixes #56
Addressing stylistic issues
Merge pull request #57 from Aintaer/diff

Model fixes for registering change detection