Specs cleanup: Split specs into unit and API specs

Unit specs are unit tests of internal stuff. API specs are tests of the
user-visible APIs and behavior.

I think it makes sense to make this distinction because then the public
API line is more clearly visible e.g. when using the specs as
documentation.
Specs cleanup: Rename & simplify |varyAll|

Rename |varyAll| to |varyOptimizationOptions|, because that's what the
function does. Simplify as we don't need a fully generic solution.
Specs cleanup: Implement PEG.js API specs

Some parts were previously part of generated parser specs, these were
moved.
Specs cleanup: Implement plugin API specs
Specs cleanup: Implement generated parser API specs

The generated parser API specs are mostly extracted from
generated-parser.spec.js, which got renamed to
generated-parser-behavior.spec.js to better reflect its purpose.
Require Node.js >= 0.10.0

Travis CI builds with Node.js 0.8.x started to fail:

  https://travis-ci.org/dmajda/pegjs/jobs/26691570

Rather than investigating what's wrong I decided to stop supporting Node
0.8.x. Node.js 0.10.x is here for over a year, which should be enough
time for everyone to upgrade in the fast-paced Node.js world.
Simplify visitors by providing default visit functions

The |visitor.build| function now supplies default visit functions for
visitors it builds. These functions don't do anything beside traversing
the tree and passing arguments around to child visit functions.

Having the default visit functions allowed to simplify several visitors.
Remove useless test in the |reportLeftRecursion| pass

Empty sequences are not allowed anymore so we don't have to test for
them.
Specs cleanup: Simplify compiler passes specs

After 898a7b5a2d0438aecfca9d0ec548ff60fcb00747 the specs mostly tested
the visitor implementation, not actual code in the passes.
Reordering in visitors and their specs

Reorder visiting functions and their specs to more closely match
ordering used in the PEG.js grammar.
Specs cleanup: Use raw node types in |generateBytecode| specs

Use raw node types instead of humanized node names in |generateBytecode|
specs. This corresponds more closely to the level the specs are written
at.
Add two missing blank lines
(extracted) preliminary fixes & tweaks
Merge commit '4a3b9cbb8d4694f0c4fa8d3698e30f10cf6051c1'

Conflicts:
	spec/api/generated-parser-behavior.spec.js
	spec/index.html
Merge remote-tracking branch 'remotes/dmajda-original/master'

Conflicts:
	lib/compiler/passes/remove-proxy-rules.js
	lib/compiler/passes/report-left-recursion.js
	lib/compiler/passes/report-missing-rules.js
	spec/unit/compiler/passes/generate-bytecode.spec.js
	spec/unit/compiler/passes/remove-proxy-rules.spec.js
	spec/unit/compiler/passes/report-left-recursion.spec.js
	spec/unit/compiler/passes/report-missing-rules.spec.js
work chunk
collect rule invokers as part of the AST graph construction
Process the parse tree: calculate the FIRST/BITES sets for each rule / alternative and calculate the number of characters consumed by each rule / alternative.
added %{...%} custom code example in the grammar (which always fails); was a bugger to get the bytecode generated properly.
rules:
- introduced 'epsilon' keyword (and the greek epsilon as a shorthand)
- more work on the annotations, including defining various keywords which will be used in them
- fixed the EOS rule

other stuff:
- augmented the visitor to include all annotations in the default AST tree traversal (where node and annotation are passed alongside the param itself to its visitor)
- range bytecode generator didn't use the standard buildAppendLoop() which is identical to the code presented there: now it's using this function instead, like everyone else.