Module#include implementation

Specs fixed:

Module#include
- calls #append_features(self) in reversed order on each module
- raises a TypeError when the argument is not a Module
- recursively includes new mixins
- detects cyclic includes
- accepts no-arguments
- returns the class it's included into
Module#append_features detects cyclic include

Specs fixed:

Module#append_features
- raises an ArgumentError on a cyclic include
Module#constants respects included modules

Specs fixed:

Module#include
- imports constants to modules and classes

Module#constants
- returns an array of Symbol names of all constants defined in
  the module and all included modules
- includes names of constants defined after a module is included
Implemented Module#include?

Specs fixed:

Module#include?
- returns true if the given module is included by self or one of it's ancestors
- returns false if given module is equal to self
- raises a TypeError when no module was given
Make RPython happy
Fixed failing test

In ruby only modules can be included
Split test case
Use reversed instead of countdown xrange
Implement Module#<=

Specs fixed:

Module#<=
- returns true if self is a subclass of, the same as or includes the given module
- returns nil if self is not related to the given module
- returns false if self is a superclass of or is included by the given module
- raises a TypeError if the argument is not a class/module
Implement Module#<

Specs fixed:

Module#<
- returns true if self is a subclass of or includes the given module
- returns false if self is the same as the given module
- returns nil if self is not related to the given module
- raises a TypeError if the argument is not a class/module
Implement Module#>=

Specs fixed:

Module#>=
- returns true if self is a superclass of, the same as or included by given module
- returns nil if self is not related to the given module
- returns false if self is a subclass of or includes the given module
- raises a TypeError if the argument is not a class/module
Implement Module#>

Specs fixed:

Module#>
- returns true if self is a superclass of or included by the given module
- returns false if self is the same as the given module
- returns nil if self is not related to the given module
- raises a TypeError if the argument is not a class/module
Implement Module#<=>

Specs fixed:

Module#<=>
- returns -1 if self is a subclass of or includes the given module
- returns 0 if self is the same as the given module
- returns +1 if self is a superclas of or included by the given module
- returns nil if self and the given module are not related
- returns nil if the argument is not a class/module
Merge pull request #669 from krekoten/module_comparison

Module comparison methods
Module#remove_method

Specs fixed:

Module#remove_method
- removes the method from a class
- removes method from subclass, but not parent
- raises RuntimeError when frozen
Implemented Module#method_removed

Specs fixed:

Module#method_removed
- returns nil in the default implementation
- is called when a method is removed from self
Do not build temporary lists
BasicObject#singleton_method_removed

Specs fixed:

BasicObject#singleton_method_removed
- is called when a method is removed on self
Make RPython happy
BasicObject#singleton_method_removed