Merge: Distinguish top-level methods
The point of the PR is the commit that adds `MMethod::is_toplevel` to distinguish methods defined at the top-level of a module, with those defined in an explicit refinement of Object.
Such an information could be used by documentation tool to filter methods.
A following commit use the information to enforce that top-level methods redefine and are redefined only by top-level methods (by refinement). However, the rules in the model remains unchanged and there is no other use of the `is_toplevel` information in tools or execution engines.
The bunch of first commits are used to clean and improve the check of redefinitions used latter.
Pull-Request: #489
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>