For performance, new special evaluation path for one-step path expressions
in FacetUtilities.  This path avoids allocating intermediate sets and
shortcuts several layers of (abstraction) function calls.  To support
this, added visitor/iterator functions to indices in database/local.js
Factored database layer; database.js now contains all methods that
depend on the specific structure of an "index" while local.js has
everything else.   Not clear this is the right structure; arguably the
index is a "local" implementation that should be called local.js,
while the database can work with any implementation of the index.
Modified 2-level index to avoid creating a storage object at second
level until more than one item needs to be stored there.  First stored
item gets stored in place of storage object.  This makes messy code,
but it's much faster.
Corrected some abstraction leakage between two-level index and
database layers.
Modified facet computations to do less work.
When facets are updated, each facet needs the set of items that pass
all other facets, so it can display counts properly for its values.
Previous algorithm for doing this was quadratic in the number of
restricted facets (for each facet, it applied restrictions of all
others).  New algorithm is linear; it intersects prefixes and suffixes
of other facet restrictions.

Also modified facet computation to avoid copying the allItems collection.
New methods to get allItems and restrictedItems collections read-only.
Avoids copying the sets to improve efficiency.
Added fast path for computing facets when only one is restricted.
added "load complete" message
bugfix: wasn't properly setting value type for fast expression evaluation
Merge pull request #65 from karger/13-11-04_facet_performance

13 11 04 facet performance