Let PgObject_GetBuffer check for an array struct after a bad array interface
The PgObject_GetBuffer C api function would return with an exception if an object had a __array_struct__ property that failed to return a wrapped PyArrayInterface struct. Now it clears any exceptions and continues on to check for an array interface.
As a side benefit, PgObject_GetBuffer no longer uses PyObject_HasAttrString, which calls PyObject_GetAttrString and discards the returned object. This meant PgObject_GetBuffer could retrieve a __array_struct__ or __array_interface__ attribute twice per call, executing related property code twice as well. Now __array_struct__ and __array_interface__ are retrieved at most once per PgObject_GetBuffer call.