Generalizing the Projection class

Taking a crack here at generalizing the Projection class, so that we don't have to write a new version of it for each *RecordField enumeration that we create corresponding to each schema that's added to adam.avdl.

I don't know if this is idiomatic Scala, and I played around with a couple of ways to do this, so I'd really welcome comments if there's a cleaner way to handle this that anyone can think of.