I simplified this code a lot, this branch need to be rebased. A lot of the horrible magic has been removed from the `Setting` class. We now have two APIs to manipulate setting options: `.resetOptions()` and `.filterOptions()`.