Fix doc comment in Overlay.
Rewrite the Mask component from the ground up to add a more easily usable API, automatic gui.Component support, and heavy refactoring into smaller, more reusable/understandable methods.

Mask no longer needs to be instantiated with a target element (it can be added later), and a gui.Component may now be provided as the `target` directly. If the gui.Component is not yet rendered when the Mask is shown, the Mask will wait for the Component to be rendered before showing itself.

Mask's API has now changed as well to only accept a configuration object as its only constructor argument, instead of the old two argument constructor.

This commit also simplifies gui.Component's mask handling functionality, removing a few state properties like `masked`, `deferMaskShow`, `_mask`, and `deferredMaskConfig`, replacing with just one property: `componentMask`.