Functional Tests!

I just did a test merge of this and the conflict is trivial, just the .gitignore file, which can just be taken entirely from dev.