#586 add hoisting check to no-unreachable

Added check for no-unreachable if node has:
- `node.type` equals `FunctionDeclaration`
- `node.type` equals `VariableDeclaration` and every declaration has no init

I also added some tests that verify the new implementation and refactored the initial loop to a function to avoid repetition. This pull request should resolve https://github.com/eslint/eslint/issues/586

If there's anything wrong feel free to tell me.