epic refactoring for our purposes

focused on formats that we are currently considering, removed others

tried multiple canonical structs, not just primitives

removed time from structs for now (should add again later)
I see this as a map in a struct in a struct.  Typical "map" usage in protobuf looks like this:
```
message SetAttributesRequest {
  message Attribute {
    required string key = 1;
    required string value = 2;
  }
  required uint64 entity_id = 1;
  repeated Attribute attr = 2;
}
```
rather than this:
```
message SetAttributesRequest {
  message Attribute {
    required string key = 1;
    required string value = 2;
  }
  message Attributes {
    repeated Attribute attr = 1;
  }
  required uint64 entity_id = 1;
  required Attributes attrs = 2;
}
```