RFC position code

This is a stab at the position code. Any feedback welcome.

I need to at least clean it up and add more tests. Just want to make sure it's going down the right track.
all the Index unapply methods are horrible. there must be a nicer way to do them.

also they need to be cached, probably in a cache owned by the ReferenceData instance. It's very slow to turn strings into indexes for each valuation.