Declare features before setting their state

A feature is not included in the set returned by `Flipper::DSL#features` until it is written to the adapter.
Currently the only time a feature is persisted via the DSL is when its enablement state is changed.

It's useful to store a list of features you expect to flip so that they can be configured in the flipper-ui.

This PR changes `Flipper::DSL#features` to return a `Set` subclass which has an extra DSL method, expected to be used as follows:

```
flipper = Flipper.new Flipper::Adapters::Redis.new(namespaced_redis)
flipper.features.declare(:badgerama, :sticky_feedback, :homepage_redesign)
``` 

The DSL extension `flipper.features.declare` aims to avoid any confusion with `Flipper.register`