implement public as global function
use auto_ptr in Function::PrepareEnvironment
removed Declaretion::PrepareArgsForUnary