Unified Form Language: a Domain-Specific Language for Weak Formulations of Partial Differential Equations