[API] Make set_user_data() functions take a replace parameter

We need this to set data on objects safely without worrying that some
other thread unsets it by setting it at the same time.
diff --git a/src/hb-shape.cc b/src/hb-shape.cc
index 4202302..9a4ebfe 100644
--- a/src/hb-shape.cc
+++ b/src/hb-shape.cc
@@ -76,7 +76,7 @@
           end = p + strlen (p);
 
 	for (unsigned int j = i; j < ARRAY_LENGTH (shapers); j++)
-	  if (end - p == strlen (shapers[j].name) &&
+	  if (end - p == (int) strlen (shapers[j].name) &&
 	      0 == strncmp (shapers[j].name, p, end - p))
 	  {
 	    /* Reorder this shaper to position i */