Change module dependencies.

Removing the 'goog.require' calls from 'jsnx/jsnx.js' allows us to
include the file at the beginning of the compiled code. This is
necessary so that build constants such as 'jsnx.TESTING' are available
throughout the whole script.
Add map and tuple type.

'jsnx.contrib.Map' is based on the ES6 map interface and is the
foundation for generic node support.
Tuples are a very useful data structure in Python and
'jsnx.contrib.Tuple' tries to provide similar possibilities.
Add jsnx.contrib.Set.

A set implementation roughly following ECMAScript 6's set
implementation. Uses jsnx.contrib.Map.
Add generic node support and mocha test framework.

The library was changed to support and
respect different data types for node values. Until now, every node
value was implicitly convert to a string.
With this change, numbers and strings and every object implementing
'toString' can be used as node value.

This is a breaking commit. The following changes have been made:

  - Objects used to store nodes as keys have been replaced by
    jsnx.contrib.Map. Every method which used to return an object of
    nodes (such as "G.degree()") returns a jsnx.contrib.Map now.
  - The method "G.get_node" was renamed to "G.get" to be closer to the
    jsnx.contrib.Map interface.

The main difference for user code is the switch from bracket notation
(i.e. "degrees[node]") to the Map interface ("degree.get(node)").
Instead of using a "for...in" loop to iterate over all values, the
".forEach" of the map object can be used.

Since the test cases had to be adjusted to generic nodes, this
opportunity was taken advantage of to change the testing framework from
Jasmine to Mocha, which enables us to write simpler test cases.