Beginnings of using Q Promises API for some methods.

This is the first commit of several to ehance the gremlin-node API to
support a promises-style API. The plan is that most of the functions that
take callbacks will return promises if a callback is not provided,
but still work as usual if a callback is provided.

Note the use of  the Q nodeify pattern on g.e() and g.v() in this commit.
Change .v() to always return a pipeline (or promise for one).

The .v() step was written to return a vertex if the passed in
arguments included only one id, otherwise returning a pipeline.
This difference in semantics seems troublesome. Code that knows
only one id is being passed in should just call getVertex. Otherwise
the code should expect a pipeline.

This is a change in API so might be controversial, i.e. it might
break existing applications. But given how little activity there
has been with this project in the last ~10 months, I'm betting
it is ok to make API changes like this now.
Replace pipeWrap with pipePromiseWraps. Promises for many ops.

This change manages to convert many of the PipelineWrapper methods
to work with either callback or promise API, by simply replacing
one utility function pipeWrap() with a slightly more complex
function pipePromiseWrap.
Finish converting methods with callbacks to be able to return promises.
Add implementation for ElementWrapper.toJSONSync

This function is necessary to get the right behavior in gremlin-repl
when using node's REPL.
Merge pull request #3 from jimlloyd/feature/promises-api-3

Add Q Promises/A+ API to most async methods
Fix a bug due to Q.all() running concurrent operations in parallel.

ElementWrapper.setProperties() must issue an async operation per (key,value)
in the properties. TinkerGraph does not support multiple concurrent
operations, so we must force the operations to be performed sequentially.
Merge pull request #4 from jimlloyd/feature/fix-set-properties-bug

Fix a bug due to Q.all() running concurrent operations in parallel.
Fix lint errors introduced in previous commits, and 'fix' Makefile.

I managed to commit to master changes with lint errors. This commit
fixes those lint errors, but also changes the Makefile so that the
Makefile 'test' target depends on the 'lint' target, so that I won't
make this same mistake in the future.
Merge pull request #5 from jimlloyd/feature/fix-lint-errors

Fix lint errors introduced in previous commits, and 'fix' Makefile.
Don't use Q.all() for removeProperties.

I realized I should audit the code for other places where we can modify
the database using concurrent operations perfored by Q.all().
RemoveProperties was the only case.
Merge pull request #6 from jimlloyd/feature/dont-use-q-all-for-remove-properties

Don't use Q.all() for removeProperties.
In unit tests using deepEqual on arrays, sort the arrays.
Use more specific/actionable assertions.
Merge pull request #7 from jimlloyd/feature/stable-deep-equal-arrays

Improve unit tests
Change Travis configuration to use jvm/nvm test matrix.

Copy the test matrix configuration now used in node-java,
but testing only jvm(1.7,1.8) X nvm(0.10,0.11).
Merge pull request #8 from jimlloyd/feature/travis-test-matrix.2

Change Travis configuration to use jvm/nvm test matrix.
Update package.json.
Remove dependencies on async library.

After the conversion to using supporting Q promises, there was
only one location, in a unit test, where the code still depended
on async. This commit removes that dependency, and removes
async from the package dependencies.
Require node >=0.10.0.

FYI, I tried node 0.8.x on Travis and the unit tests failed. I doubt that anyone needs gremlin-node to run with node 0.8 so I am removing support for it.