attribute assert works, time to refactor
fleshed out attr tests
Merge branch 'feature/attribute-assert' into develop
prove combination on several levels
make test for custom assertion pass again
Merge branch 'develop' of https://github.com/busterjs/referee-combinators into integrate_attr

Conflicts:
	lib/referee-combinators.js
	test/referee-combinators-test.js
remove lints from test
add TODO: we should allow an optional message in *both* stages, preparing (when "expected" is specified) AND execution (when "actual" is specified) - with the latter, if present, overriding the former. However, this requires specialisation on the arity of the assertion.
refactor tests: move helper fn out of the way for easier comparison
add test "extended asserts/one attribute" in @meisl style (`makeTests` instead of `combinatorTest`)

This was surprisingly easy! There is of course something missing/not quite right: useful names of tests created. Both sub-testcases have been deferred s.t. we can see the names created (see below).
Problem 1: custom test description lost/not possible
Problem 2: anon functions as args yield *very* ugly test names (source of function is in test name)

names created:
@johlrogge style:
   Deferred: extended asserts one attribute pass for equal attribute
   Deferred: extended asserts one attribute fail for unequal attribute
   Deferred: extended asserts one attribute pass for equal and other  attributes
   Deferred: extended asserts one attribute fail for missing attribute

@meisl style:
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr(name, function (actual) { // TODO: allow optional message also here
                fn.apply(this, [actual].concat(expected));
                return actual;
            })({ name: "other" }) should pass
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr(name, function (actual) { // TODO: allow optional message also here
                fn.apply(this, [actual].concat(expected));
                return actual;
            })({ name: "the name" }) should fail
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr(name, function (actual) { // TODO: allow optional message also here
                fn.apply(this, [actual].concat(expected));
                return actual;
            })({ name: "other" }) should fail
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr(name, function (actual) { // TODO: allow optional message also here
                fn.apply(this, [actual].concat(expected));
                return actual;
            })({ name: "the name" }) should return actual value
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr(name, function (actual) { // TODO: allow optional message also here
                fn.apply(this, [actual].concat(expected));
                return actual;
            })({ name: "the name" }) should pass
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr(name, function (actual) { // TODO: allow optional message also here
                fn.apply(this, [actual].concat(expected));
                return actual;
            })({ name: "the name", other: "ignored" }) should return actual value
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr(name, function (actual) { // TODO: allow optional message also here
                fn.apply(this, [actual].concat(expected));
                return actual;
            })({  }) should return actual value
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr(name, function (actual) { // TODO: allow optional message also here
                fn.apply(this, [actual].concat(expected));
                return actual;
            })({ name: "the name", other: "ignored" }) should pass
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr(name, function (actual) { // TODO: allow optional message also here
                fn.apply(this, [actual].concat(expected));
                return actual;
            })({ name: "other" }) should return actual value
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr(name, function (actual) { // TODO: allow optional message also here
                fn.apply(this, [actual].concat(expected));
                return actual;
            })({  }) should pass
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr(name, function (actual) { // TODO: allow optional message also here
                fn.apply(this, [actual].concat(expected));
                return actual;
            })({  }) should fail
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr(name, function (actual) { // TODO: allow optional message also here
                fn.apply(this, [actual].concat(expected));
                return actual;
            })({ name: "the name", other: "ignored" }) should fail
testHelper: use buster.format.ascii also for arguments (that appear in test name)

@meisl style test names now look like this:
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr("name", function () {})({ name: "the name" }) should pass
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr("name", function () {})({ name: "the name" }) should fail
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr("name", function () {})({ name: "other" }) should fail
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr("name", function () {})({  }) should fail
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr("name", function () {})({  }) should return actual value
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr("name", function () {})({ name: "the name", other: "ignored" }) should return actual value
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr("name", function () {})({ name: "the name" }) should return actual value
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr("name", function () {})({ name: "other" }) should return actual value
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr("name", function () {})({ name: "other" }) should pass
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr("name", function () {})({  }) should pass
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr("name", function () {})({ name: "the name", other: "ignored" }) should pass
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr("name", function () {})({ name: "the name", other: "ignored" }) should fail
partial asserts define .displayName, using this for test names

now they look like this:
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr("name", assert.equals(the name))({ name: "the name" }) should fail
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr("name", assert.equals(the name))({ name: "other" }) should fail
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr("name", assert.equals(the name))({  }) should pass
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr("name", assert.equals(the name))({ name: "other" }) should return actual value
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr("name", assert.equals(the name))({ name: "the name", other: "ignored" }) should pass
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr("name", assert.equals(the name))({ name: "the name", other: "ignored" }) should return actual value
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr("name", assert.equals(the name))({ name: "the name" }) should return actual value
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr("name", assert.equals(the name))({ name: "the name" }) should pass
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr("name", assert.equals(the name))({  }) should return actual value
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr("name", assert.equals(the name))({ name: "other" }) should pass
Deferred: combinator ('partial') assertions extended asserts one attribute assert.attr("name", assert.equals(the name))({  }) should fail
Deferred: combinator ('partial') assertions extended asserts one attribute refute.attr("name", assert.equals(the name))({ name: "the name", other: "ignored" }) should fail
+ test property .displayName is present on 'partial' assertion completely applied (TODO: same for all other forms)
fixed test-helper (now proper tests for .displayName), refactor 'attr' tests a bit (less confusing literals)
delinting & removed old-style tests
Merge branch 'integrate_attr' into develop