Revert "Remove TailRecVisitor for now"

This reverts commit 3422fbe15feb3059c5012920bcde1a953429df65.
Remove warnings by strengthening AST types

* Remove MethodDecl from TypedDecl, because it really isn't
  * Rename MethodDecl.typ to returnType
* Namer: Use SymbolTable specialized to TypedDecl
Merge pull request #170 from Kha/ast-types-STRONK

Remove warnings by strengthening AST types
Change type of Ref.decl from Option[Decl] to Decl

Removes unnecessary checks - every phase after Namer should rely on
decl always being set.
Merge pull request #171 from Kha/ref-STRONK

Change type of Ref.decl from Option[Decl] to Decl
Merge pull request #158 from Kha/tailrec

Make it tail recursive again
Implement TailRecursiveVisitor, use it everywhere
Merge branch 'master' of https://github.com/MiniJavaInScala/mjis

Conflicts:
	src/main/scala/mjis/ast/SyntaxTreeVisitor.scala
Do not create duplicate return statements for void functions.

Also do not create FIRM nodes for unreachable code (code that comes
after a Return statement).

Fixes #168.