Rewrite in Typescript, for v0.3

Basilisk gained concurrency and management primitives *way* too early,
so it needed to be pruned into a set of tools which had proved their
value.

It now comprises:

 1. A "Struct" interface, a `makestruct` function which produces
    constructors for that interface, and a Typescript base class
    which does the same.

 2. An "equals" function which compares two objects and applies
    an equality protocol to check for strict equality.  This can
    be implemented by individual structs or other data types
    to give a performant O(n) equality function.  (Strict === is
    still perfectly valid, but may not catch some equivalence
    cases which are useful to check before performing very expensive
    operations - eg. network ops).

 3. Two core datatypes: Vector and StringMap.  These implementations
    have received NO PERFORMANCE OPTIMISATION and are completely naive.

 4. A query/update function called 'q.swap', which takes a starting
    object, a path, and a function to apply to that path.  The result
    is swapped in at the bottom level, and the result is returned.

This makes code which changes a property somewhat deep in a tree
much simpler to understand.  Unlike the old 'path' functions
this one can be used to descend into Vectors and StringMaps and
so should be useful on real-world datastructures.

The Q module is experimental, and the interface for Vectors and StringMaps
is not yet final: in particular, 'set' vs. 'replace' for the mutation
functions may change, and both may need a consistent iteration protocol.
Move to a common get/set API on the basic basilisk objects, and clarify the current state of the API.
Improve documentation, and make the path code a little clearer.
Generalise the swap function to provide a simpler interface for related functions.
Clarify TODO list.
Make PathSegments explicitly immutable.
Reduce dependency on an ES5 Sham.
Adjust StringMap to use .from rather than construction.
Move to a private constructor for vector.
Widen the pit of success on stringmap and vector.
Core datastructures for Basilisk: Vector, HashMap and StringMap.

These persistent datastructures should have roughly the right
performance characteristics - O(log[32]n).  The original (simple)
datastructures are available as SimpleStringMap and ArrayVector.
Try to make the README clearer about what the project does, and aims to do.
Remove the 'optional' equals property to narrow the core scope.
Move to a node + amd build process, with a simple set of node-only tests available.
Object.freeze() is a performance killer, so use it only when essential