Backend-agnostic substituted hyperparameter declaration. Started, pretty straightforward, needs tests. Interacts with #1 somewhat, needs to translate `variable()` directly to hyperopt nodes.