Basic shadow datatypes

@markhibberd @maxpow4h @etorreborre @charleso @raronson 
Name. This should either just be `ShadowRepository`, or it should be `ShadowRepository` trait with this extending it. I don't have a real preference assuming at some point there will be more than one implementation.