Refactoring: more robust tokenizer, modules, etc.

This patch continues my refactoring effort. Changes:

 * Replaced reg.token (nee tx) with more robust tokenizer.
 * Added basic module system to JSHint Stable.
 * Extracted lintName into style JSHint module.

All tests pass.
Add metadata to tokens produced by scan* methods.

Some constants and design decisions were partially borrowed from
Esprima source code.
New string tokenizer.

Rewrote string tokenizer now works from inside of next() method
instead of token(). It adds better handling for multi-line strings
and opens a door for making some features (trailing spaces, etc.)
more context specific.

This commit also extracts quotmark functionality into a style
module.
Updated .gitignore
More granural identifier parsing
New number tokenizer.

Most of the code was taken from Esprima's scanNumericLiteral()
function but I made it more tolerant to bad numbers: my version
returns tokens even if numbers are invalid (e.g '0x' or '099')
but marks them as 'malformed' so that JSHint could produce a nice
warning.

Also, JSHint now understands numbers with leading dots: e.g. .12
New regexp tokenizer.

This version removes some warnings and, in general, is very
liberal. It does, however, test your regular expressions
against the RegExp object and warns if it throws an error.
(This also makes it a little bit platform dependent)
Disallows the use of reserved words as variable or function declaration identifiers. Currently, no warning is given for such use of reserved words when the es5 option is set to true. See issue #744 for more details.
changed the exit handling
Respect the unused option when outputting.
New comment tokenizer.

Rewrote comment tokenizer to return comments in whole so that
we don't have to iterate symbol-by-symbol from the doOption
function in jshint.js.

Changes:
 * We now recognize space between /* and jshint/global/etc.
 * We now understand both /*globals and /*global
 * All special comments _must_ be separated by commas. This
   is a potentially breaking change because some people were
	 omitting commas by mistake.
Rename malformed to isMalformed for consistency
Moved isIdentifierStart into scanNumericLiteral
Added comments to the Lexer code
Don't stop parsing the expression when it contains a number with a leading decimal point.

Since an expression of the form `var x = .5 + 1;` is perfectly valid, we should continue to parse it as normal and not raise confusing unrelated warnings. See issue #751.
Added test to ensure an expression containing a number with a leading decimal point only throws the appropriate JSHint error and no misleading ones due to non-parsing of the remainder of the expression
Merge pull request #752 from jamesallardice/leading-dot-expression

Don't stop parsing the expression when it contains a number with a leadi...
Merge pull request #746 from Pennine-View-Harrogate/wsh-unused-bug

Respect the unused option when outputting.
Merge branch 'es5-disallow-reserved-words' of git://github.com/jamesallardice/jshint into jamesallardice-es5-disallow-reserved-words
A test case for patch GH-745.

Committed as: 2a0e270b694e007eba45547805f89c05fea873e9 (merge
commit: 2a2e2adc9329207d75acb4545f4e1e0273d6f53f).