Improvements to function, name and arguments

# PLEASE DO NOT MERGE THIS YET

I am starting this pull request as a good place for a discussion on these items.

This commit is a first pass at adding a number of improvements to functions and how they are detected.

Function declarations now have a higher granularity to expose the function keyword, the name, the parenthesis, argument definitions, and commas within the argument definitions.

I also added a new block type called jsFuncBlock which is unique from jsBlock that defines a block region for function definitions.

This also ultimately differentiates function definitions from jsFuncCall.

It would be good for you guys to look over this and ensure I am doing everything properly. Also, I would ultimately like to perhaps work to better differentiate jsBlock from jsFuncBlock in its definition, since they are literally almost the same at the moment.