CacheDict is a dict-like object optimized for caching operations. It maintains
a size limit, and removes the oldest-set object upon hitting the size ceiling.
It also offers a prune function that removes all "expired" objects.

Scripts are now dynamically loaded from files in the scripts subpackage using
importlib and inspect. The bot engine has zero knowledge of individual scripts
beyond interfacing attributes and methods. The scripts themselves are also
slightly modified to adapt to the new system.

The default configurations hardcoded inside the bot engine are removed, because
no matter what a config file is required. The removal of default configurations
just means that a few more settings in the config file are mandatory.

Also slightly changed remind's arguments. Rather than a target and a message,
it now only needs a message. Also added an explicit -s option to specify time
in seconds, even though it's already the default.