ValidateIndentation: Relax indentation rules for function expressions.

Fixes #588
Fixes #387
ValidateIndentation: remove array and object indentation validation

Fixes #627
Refs #545
Docs: Contributing - more project and process details

Closes gh-643
Fixes #642
validateJSDoc: Deprecate rule

Closes gh-638
Fixes #59
fix invalid result of findXxxxToken methods when value is provided

when you provide both type and value to the "JsFile.findNextToken"
method, it will return the first token matching the type without
checking the value because of the "prevToken.type !== type" condition.
The same applies to both "JsFile.findNextToken" and
"JsFile.findPrevToken"

Here are for reference five failling tests for "JsFile.findNextToken"
which this commit resolves:

  it('should find the correct token when type and value are specified', function() {
    var str = 'switch(varName){case"yes":a++;break;}';
    var tree = esprima.parse(str, {loc: true, range: true, tokens: true});
    var file = new JsFile(null, str, tree);

    var switchToken = file.getTokens()[0];

    var nextToken = file.findNextToken(switchToken, 'Punctuator', '{');
    assert(nextToken.value === '{');

    var nextToken = file.findNextToken(switchToken, 'Punctuator', ':');
    assert(nextToken.value === ':');

    var nextToken = file.findNextToken(switchToken, 'Punctuator', '}');
    assert(nextToken.value === '}');

    var nextToken = file.findNextToken(switchToken, 'Keyword', 'if');
    assert(nextToken === undefined);

    var nextToken = file.findNextToken(switchToken, 'Keyword', 'break');
    assert(nextToken.value === 'break');
  });
WIP version 0.0.1