Fix: `core.unload()` used hardcoded `'widgets/'` path

When using Aura and setting a different path for widgets, the
`core.unload()` method would still use a hardcoded `'widgets/'`
path.

This change make the path used to unload a widget's files the same as
what is used for starting a widget.

The common code was refactored into a new method, `core.getActualWidgetsPath()`.

Also added a `core.is_loaded()` method to determine if a widget is loaded.

As I commit this, I am also noticing that the `core.unload()` method never unsets
the sandbox set for a loaded application. I'll look into that later.