Add hb_buffer_clear()

Which is like _reset(), but does NOT clear unicode-funcs.
diff --git a/src/hb-buffer-private.hh b/src/hb-buffer-private.hh
index c1acffd..4e92fb5 100644
--- a/src/hb-buffer-private.hh
+++ b/src/hb-buffer-private.hh
@@ -133,6 +133,7 @@
   /* Methods */
 
   HB_INTERNAL void reset (void);
+  HB_INTERNAL void clear (void);
 
   inline unsigned int backtrack_len (void) const
   { return have_output? out_len : idx; }
diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc
index 06b5c05..6aff7b9 100644
--- a/src/hb-buffer.cc
+++ b/src/hb-buffer.cc
@@ -142,6 +142,15 @@
   hb_unicode_funcs_destroy (unicode);
   unicode = hb_unicode_funcs_get_default ();
 
+  clear ();
+}
+
+void
+hb_buffer_t::clear (void)
+{
+  if (unlikely (hb_object_is_inert (this)))
+    return;
+
   hb_segment_properties_t default_props = _HB_BUFFER_PROPS_DEFAULT;
   props = default_props;
 
@@ -722,6 +731,12 @@
   buffer->reset ();
 }
 
+void
+hb_buffer_clear (hb_buffer_t *buffer)
+{
+  buffer->clear ();
+}
+
 hb_bool_t
 hb_buffer_pre_allocate (hb_buffer_t *buffer, unsigned int size)
 {
diff --git a/src/hb-buffer.h b/src/hb-buffer.h
index dc63d1b..fbd809c 100644
--- a/src/hb-buffer.h
+++ b/src/hb-buffer.h
@@ -135,6 +135,10 @@
 void
 hb_buffer_reset (hb_buffer_t *buffer);
 
+/* Like reset, but does NOT clear unicode_funcs. */
+void
+hb_buffer_clear (hb_buffer_t *buffer);
+
 /* Returns false if allocation failed */
 hb_bool_t
 hb_buffer_pre_allocate (hb_buffer_t  *buffer,