Update trait to use boot<TRAIT NAME> instead of defining a static boot function.

Hey Chris, this pull request is to make the trait works better with model, whereby if models define their own static boot function, the one defined in traits will not be used. By defining "trait boot" function, this will guarantee (within certain parameter) that the "trait boot" static function will always be called.