Override a Built-in Function

Any similarly-named function defined in a script overrides any built-in or registered native Rust function of the same name and number of parameters.

// Override the built-in function 'to_float' when called as a method
fn to_float() {
    print(`Ha! Gotcha! ${this}`);
    42.0
}

let x = 123.to_float();

print(x);       // what happens?

Most of Rhai's built-in functionality resides in registered functions.

If you dislike any built-in function, simply provide your own implementation to
_override_ the built-in version.

The ability to modify the operating environment dynamically at runtime is called
"[monkey patching](https://en.wikipedia.org/wiki/Monkey_patch)."
It is rarely recommended, but if you need it, you need it bad.

In other words, do it only when _all else fails_.  Do not monkey patch Rhai simply
because you _can_.

Rhai searches for the correct implementation of a function in the following order:

1. Rhai script-defined [functions],

2. Native Rust functions registered directly via the `Engine::register_XXX` API,

3. Native Rust functions in [packages] that have been loaded via `Engine::register_global_module`,

4. Native Rust or Rhai script-defined functions in [imported][`import`] [modules] that are exposed to
   the global [namespace][function namespace] (e.g. via the `#[rhai_fn(global)]` attribute in a
   [plugin module]),

5. Native Rust or Rhai script-defined functions in [modules] loaded via
   `Engine::register_static_module` that are exposed to the global [namespace][function namespace]
   (e.g. via the `#[rhai_fn(global)]` attribute in a [plugin module]),

6. [Built-in][built-in operators] functions.