Completely changed how variants are handled. Also got rid of most tests
since they were based on variants but JSON doesn't allow strings to be
at the root. Tests don't pass yet.