Implement `TryFromJs` for `JsObject` wrappers (#2809)
This change allows using built-in `JsObject` wrappers with the `TryFromJs` logic, which makes it easier to derive it in complex objects containing known built-ins, being able to use all the power of the wrappers even inside complex structures.
It changes the following:
* Implements `TryFromJs` for all `JsObject` wrappers ~, except for `JsProxy` and `Js<Int>Array` wrappers~ -> This has now been added.
* Adds checker functions for individual typed array objects.
* Adds some missing checker functions from `Object` to `JsObject`
~The reason for not implementing it for `JsProxy` is that we don't have a way (as far as I can tell) to know if a `JsObject` is a `Proxy` object. The reason for the typed arrays (note that `JsTypedArray` implements `TryFromJs`) is that I didn't find an easy way to know which type of typed array a `JsObject` was. Do we have a way of using a `JsObject` to create a Rust `JsUint8Array` or the like?~
#[doc = concat!("`", stringify!($name), "` provides a wrapper for Boa's implementation of the ECMAScript `", stringify!($constructor_function) ,"` builtin object.")]
$name:ident,
$constructor_function:ident,
$checker_function:ident,
$constructor_object:ident,
$element:ty
)=>{
#[doc = concat!(
"`",stringify!($name),
"` provides a wrapper for Boa's implementation of the ECMAScript `",