implement AST::deep_copy(), it uses naked pointers because of covariance, unfortunately
basic instantiation (there's a test-covered bug though)
separate unit testing helpers to their own files
fix comparison of signed/unsigned values
fix missing braces around array-initializer
fix probably overeager token munching, leading to spurious std::string() exceptions