Create EngineManager to handle loading, switching, and removing highlighting engines, including the special engine (taking the responsibility from the main engines)
Use EngineManager as the interface through which to interact with the current highlighting engine, removing details of engine management from the code and allowing code to assume a highlighting engine is always present