Splitting the low-level ValueGeneration enum; Issue #704

From issue:

ValueGeneration.OnAdd means generate a value for the property in the state manager when the entity is put into the Added state. It doesn't have a direct impact on the update pipeline.

ValueGeneration.OnAddAndUpdate doesn't have any meaning in the state manager and doesn't make use of value generators at all. It tells the update pipeline that the value is computed on the store and so should always be obtained from the store for both inserts and updates.

These things are therefore orthogonal and don't really belong in the same enum. It might be cleaner to just have two bool flags on the API surface. For example, GenerateValueOnAdd and IsStoreComputed.
I agree. However, there are lots of TODOs/issues in this code based on the idea of removing the special Migrations model so I decided to do something which somewhat fits with the current Migrations model where this concept is called identity even when it isn't while keeping the mapping from the core model to the Migrations model simple. On looking at the code in Migrations it seems to me that a lot of the stuff around this doesn't work correctly. For example, I can't see how store computed properties are appropriately mapped or round-tripped. Hopefully this will get fixed when the issues referenced above are fixed. Also, I couldn't think of a better name.