datastore: handle the []*Key type

Also added check for when trying to decode a nil *pb.Key

Yep, p being nil is the underlying reason here, so checking for that works too. I thought it'd be better to check len(p.GetPathElement()) in case len(p.GetPathElement()) == 0 happened for some other reason than p being nil. I'm not saying there are other possible reasons that I know of, just that it felt safer to cover them as well, just in case.

Will change to p == nil.