Add support for designating compilation features.

Essentially, these are flag sets that can be referred to by a string and parameterized by
the c.lib.features context manager. GPD is necessary because we can't pass parameters to
import. In the end, it works out okay because such features are primarily used by
developers.