Construct: Declarative data structures for python that allow symmetric parsing and building