Refactor grammar

extract the definition on an augmentation out of
the augment grammar to ease reusing it
Refactor grammar

Clean the augment definition
Modify grammar and AST for named augmentation

* add a keyword "augmentation" and a parsing rule
* add an AST node to deal with named augmentation
* add dummy methods to visitors to deal with the
  new AST node
Add toplevel declaration of named augmentation
Build a register of named augmentations in IR
Add AST node for NamedAugmentationDeclaration

ooops... should have done this earlier...
Add named augmentation application

Add a with keyword to "augment" and change the
parser accordingly.
Modify the AST node for augment to keep the list
of applied augmentation names.
Resolve named augmentations

Change the AST to IR visitor and the ir.GoloModule
to keep track of applied named augmentation and
resolve them, i.e. transform them to “regular”
augmentations.
Misc code improve

* remove unneeded default constructor for FunctionRegister
* rename some variables
* reformat code
Doc and sample for named augmentations

* Update the documentation with the new syntax
* Add a sample file
* Fix the augmentation.golo sample that used `with`
  which is now a keyword
Manage unknown named augmentations

Displays a compilation error when applying a augmentation
that is unknown in the current scope.
BUG: augmenting structs with local name

Augmenting a struct with its short did not work since the call
to `internStructAugmentations` was made *before* the augmentations
application. Now fixed
change sample file to test golodoc
Refactor module metadata

Refatoring of the magic of gathering and writing module metadata such as
imports and augmentations. Makes it more generic to ease adding named
augmentations to make them exportable.
Adds tests for local named augmentations
Refactor the named augmentation machinery

Makes the named augmentations to be search at runtime instead of being
an AST conversion:
* remove the old AST transformation
* adds a metadata method to module to list named augmentation
  applications,
* generates a new inner class in the module to hold the methods.
Big refactoring of method resolution runtime

Creates a class to encapsulate the finding of methods in augmentations
to ease the new implementation of named augmentations.
Also skips the named augmentation test that does not pass anymore, since
its still a work in progress.
Modify IrTreeDumper w.r.t. named augmentations
Local augmentations runtime resolution

Locally defined and applied augmentations are now resolved at runtime,
and can be imported in another module.
External augmentations resolution

Augmentations defined in one module and applied in another one are
resolved at runtime.
This allows to create named augmentations library that can be used (i.e.
applied on classes or structs) on other modules, in a mixin/trait
fashion.