Update Compiler.hx - keep function

Compiler.keep macro has issues:
* First it lacks some error throwing when a path is not found or not supported.
* According to code, it won't check all path of classpath. Loop will break at the very first loop when (sys.FileSystem.exists(p) && sys.FileSystem.isDirectory(p)) is false.
* The function is supposed to handle a class as parameter. but in code, theres no consistancy between package and class version. If you set a package it will get the modules contained in it. But if you specify a class path, it won't inspect the full module.
* After comment from nicolas C, i learned that addMetadata must be called BEFORE any type inclusion. Thus the package code which use getModule is not working! And the comment should explain to not call include before keep. 
* Comments explains "this does not imply inclusion of the class(es)" but it does imply inclusion in case of a package, which regarding previous point creates a bug. I would say that keep should make the include after the keep by default, but could be disabled by a parameter.
* The keep of sub types of modules is not very easy. For example with msignal.Signal. if i ask keep msignal.Signal module, it will only try to keep the class Signal, and leave Signal0 Signal1 etc.
It would be great if addMetadata (or a new function) could add keep to all sub types of a given Module.

I propose a new implementation here.