feat(core): add sandbox for module

sandbox is the facade for each module, and it's
the only way that module communitcate with each other
module cannot talk to application directly, it can
only talk to sandbox, the reason for this design is

if later, we want to change the base library, we don't
need to modify module, because sandbox is a higher level
abstract of application