ast.cpp: Fix bug in NumericParameter::decompose

The semantic_error should be thrown only if the given variable
is a pair, and thats happen precisely if var.first.operator bool()
returns true.
variable.cpp: Use clone instead of move in VariableTable::insert

The moment std::map::insert starts execution, the std::unique_ptr
ownership was already transferred to the pair that is to be inserted,
so when that insertion returns, the pair goes out of scope and our
pointer gets deleted.
This causes a null pointer dereference on the equality test.
Make the SemanticAnalyser require its parser on construction

This simplifies the code, since it allows the removal of
the method set_parser.

Affected files: main.cpp, semantic_analyser.cpp, semantic_analyser.h
semantic_analyser.{cpp,h}: Implement 'include'

We use a stack of Parsers to handle inclusion.
Problem: this implementation does not takes into account
multiple inclusions.
ast.cpp: Fix bug in NumericParameter::decompose

Same error that happened in a6a9c6 ("ast.cpp: Fix bug in
NumericParameter::decompose").
semantic_analyser.cpp: Populate SymbolTable with categories.
tree_build.cpp: Use categories in operator bodies.
main.cpp: Append newline to error message.
Move sample.txt to examples/sample.
Add example demonstrating peano arithmetic.