Symbol: Rewrite insert_symbol.

* Do not return anything.
* Create an Entry before inserting it.
Symbol: Groom code.
Symbol: Refactor error reporting.

* Make logger public.
* Delegate string formatting to error module.
* Rewrite error messages.
Symbol: Simplify managing scope visibility.
AST: Upgrade FunctionDef to ListNode.
AST: Proliferate NameNode.

* Attach a NameNode superclass to every node worth inserting to some
  kind of symbol table.
Symbol: Embed a NameNode inside every Entry object.

* Derive identifier from the referenced AST node.
* Drop explicit lineno/lexpos attributes.
* Adapt lib namespace initialization.
Symbol: Make Entry and Scope private subclasses of SymbolTable.
Symbol test: Initial API test.
Symbol: Rewrite identifier handling.

* Entry's identifier is now implicit; use node.name
Symbol: Insert/Lookup AST nodes instead of identifiers.
Symbol: Use node-aware interface to add line info to error messages.
Symbol test: [TDD] Add exception for symbol error.
Symbol: Add exception for symbol error.
Symbol: Drop guard from lookup_symbol.
Symbol: Drop guard from insert_symbol.
Symbol: Drop logger functionality; use Exceptions where needed.
Symbol, Symbol Test: Drop logger completely; remove unused imports.
Symbol: Simplify lookup_symbol.
Symbol: Inline _find_name_in _current_scope into lookup_symbol.

* Assert correct nesting.
* Handle case where identifier is not present.
* Adapt insert_symbol.