Teach groveler cstruct :count :auto to work on arrays anywhere in the struct.

The :count :auto logic assumed the struct member was an array which
filled the remainder of the struct, and would generate incorrect cffi
cstruct forms when any other struct members followed one declared
:count :auto.

The following C struct definition and groveler cstruct form
demonstrate this:

struct charbuf {
	char three_chars[3];
	int clobbered_int
};

(cstruct charbuf "struct charbuf"
  (three-chars "three_chars" :type :char :count :auto)
  (clobbered-int "clobbered_int" :type :int))
Teach the groveler's cstruct :type to guess type when :auto is given.

This means that integer size and signedness is determined by the
groveler in cases like this:

(cstruct autotype "struct mystruct"
 (myint "myint" :type :auto)
 (myarray "myarray" :type :auto :count :auto))
Don't pass user-defined strings to printf().

This allows % to be safely used in lisp symbol names which pass
through the groveler, such as the following:

(cvar ("errno" %errno) :int)
Teach the groveler to print cstruct types which are lists of symbols.

This means that forms such as the following are allowed:

(cstruct foo "struct foo"
  (mybar "mybar" :type (:struct bar)))
Expose struct slot type and count via FOREIGN-SLOT-TYPE and FOREIGN-SLOT-COUNT.

This is especially useful when the type and count have been groveled.