Generic snap gizmo to be used for different tools. The Gizmo can be configured initially by the following properties: - `"snap_elements_force"`, `"prev_point"` The following properties can be read as return: - `"location"`, `"normal"`, `"snap_elem_index"` This property can be linked to another (tool_setting.snap_elements): - `"snap_elements"` And this 3 extra utilities have been added: - `ED_gizmotypes_snap_3d_draw_util`, - `ED_gizmotypes_snap_3d_context_get`, - `ED_gizmotypes_snap_3d_update`. Differential Revision: https://developer.blender.org/D7071