v3: verify that mutation type is valid and supported by the selected API level

- if type is not supported, throw an error with an appropriate error message, depending on the actual version of the client, and the selected API level.
v3: reworked the way an app can discover the API version level it could use

- GetMinApiVersion() returns the min supported by the binding/client (200)
- GetMaxApiVersion() returns the max supported by the CLIENT installed on the machine (variable)
- GetMaxSafeApiVersion() returns the max supported by both the CLIENT (variable) and BINDING (300)
- if you want bleeding edge, use GetMaxSafeApiVersion()
- if you want deterministic behavior, use a constant level selected at design time.
FDBShell: always select the max safe api version

- we also like to live dangerously!
Merge branch 'master' into refac_tuples
Fixed merge