Change buffer default properties to invalid

This includes HB_DIRECTION_INVALID and HB_SCRIPT_INVALID.

The INVALID will cause a "guess whatever from the text" in hb_shape().
While it's not ideal, it works better than the previous defaults at
least (HB_DIRECTION_LTR and HB_SCRIPT_COMMON).
diff --git a/src/hb-buffer-private.hh b/src/hb-buffer-private.hh
index 4b1ff12..2b063b7 100644
--- a/src/hb-buffer-private.hh
+++ b/src/hb-buffer-private.hh
@@ -94,8 +94,6 @@
 
   /* Buffer contents */
 
-  unsigned int allocated; /* Length of allocated arrays */
-
   hb_bool_t have_output; /* Whether we have an output buffer going on */
   hb_bool_t have_positions; /* Whether we have positions */
   hb_bool_t in_error; /* Allocation failed */
@@ -104,14 +102,13 @@
   unsigned int len; /* Length of ->info and ->pos arrays */
   unsigned int out_len; /* Length of ->out array if have_output */
 
+  unsigned int serial;
+
+  unsigned int allocated; /* Length of allocated arrays */
   hb_glyph_info_t     *info;
   hb_glyph_info_t     *out_info;
   hb_glyph_position_t *pos;
 
-  /* Other stuff */
-
-  unsigned int serial;
-
 
   /* Methods */
   inline unsigned int backtrack_len (void) const
diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc
index 4020d2c..b71aa57 100644
--- a/src/hb-buffer.cc
+++ b/src/hb-buffer.cc
@@ -37,7 +37,12 @@
 static hb_buffer_t _hb_buffer_nil = {
   HB_REFERENCE_COUNT_INVALID, /* ref_count */
 
-  &_hb_unicode_funcs_nil  /* unicode */
+  &_hb_unicode_funcs_nil,  /* unicode */
+  {
+    HB_DIRECTION_INVALID,
+    HB_SCRIPT_INVALID,
+    NULL,
+  },
 };
 
 /* Here is how the buffer works internally:
@@ -138,7 +143,7 @@
   if (pre_alloc_size)
     _hb_buffer_ensure (buffer, pre_alloc_size);
 
-  buffer->unicode = &_hb_unicode_funcs_nil;
+  hb_buffer_reset (buffer);
 
   return buffer;
 }
@@ -231,19 +236,22 @@
 void
 hb_buffer_reset (hb_buffer_t *buffer)
 {
-  buffer->have_output = FALSE;
-  buffer->have_positions = FALSE;
-  buffer->in_error = FALSE;
-  buffer->len = 0;
-  buffer->out_len = 0;
-  buffer->i = 0;
-  buffer->out_info = buffer->info;
-  buffer->serial = 0;
+  hb_unicode_funcs_destroy (buffer->unicode);
+  buffer->unicode = _hb_buffer_nil.unicode;
 
   buffer->props = _hb_buffer_nil.props;
 
-  hb_unicode_funcs_destroy (buffer->unicode);
-  buffer->unicode = _hb_buffer_nil.unicode;
+  buffer->have_output = FALSE;
+  buffer->have_positions = FALSE;
+  buffer->in_error = FALSE;
+
+  buffer->i = 0;
+  buffer->len = 0;
+  buffer->out_len = 0;
+
+  buffer->serial = 0;
+
+  buffer->out_info = buffer->info;
 }
 
 hb_bool_t
diff --git a/src/hb-view.c b/src/hb-view.c
index 87d9b30..d7e41fd 100644
--- a/src/hb-view.c
+++ b/src/hb-view.c
@@ -355,10 +355,8 @@
   hb_buffer_add_utf8 (hb_buffer, text, len, 0, len);
   if (script)
     hb_buffer_set_script (hb_buffer, hb_script_from_string (script));
-  else
-    hb_buffer_set_script (hb_buffer, HB_SCRIPT_INVALID);
-  hb_buffer_set_direction (hb_buffer, HB_DIRECTION_INVALID);
-  hb_buffer_set_language (hb_buffer, hb_language_from_string (language));
+  if (language)
+    hb_buffer_set_language (hb_buffer, hb_language_from_string (language));
 
   hb_shape (hb_font, hb_face, hb_buffer, features, num_features);