Defining search spaces

In many cases, we may want to search a space of circuit architectures that is too large to be enumerated explicitly. In circuitree, search spaces are specified implicitly as Grammars. The package comes with a few built-in Grammars for common use cases, and in other cases a custom Grammar can also be defined using the CircuitGrammar low-level API.