adding some basic performance tests
add lunr utils module with zeroFillArray fn

zeroFillArray will quickly create a zero filled array of a specific
length, this will then be cached for future
use lunr.utils.zeroFillArray when creating vectors

removing the logic from vector for zero filling a given array leads to
significant performance improvements
stop word filter should exlcude empty tokens
remove recursion from token store

improves performance by removing the overhead of calling a function
update the search tests
add event emitter methods to index prototype

adds on for attaching event handlers and emit for firing events, also
adds a 'private' property to the index for stroring the event handlers
emit an 'add' event after adding a document

event is emitted with the document that has been added and the index it
has been added to.
add events can be silenced

passing false, or something falsey (other than undefined) will prevent
any add events from being emitted. Not passing anything, or passing true
will cause events to be fired.
emit a remove event after removing a document

the event can be silenced by passing a defined, falsey value as the
second parameter to remove
emit an update event after updating a document

add and remove events are silenced, only the one update event is fired
document the emitEvent parameter
add lunr.EventEmitter for managing events
use lunr.EventEmitter in lunr.Index

delegate `on` and `off` to lunr.EventEmitter
Merge branch 'events' into next
just search once
add sorted set performance tests
Merge branch 'perf' into next

Conflicts:
	example/example_index.json
	lib/utils.js
dont use `in` in hot parts of the code
can bind a single handler to multiple events