Refactor `empty_index` to be a method
Refactor `empty_index` to be a method

Previously, `empty_index` was a template argument to the ScatterManager
class.  However, it is more generalized to implement `empty_index` as a
method instead.  This allows arbitrary rules to be implemented for
determining which `data` indices should be considered as empty
(resulting in `empty_value` to be used instead).  By default, the
`empty_index()` method returns `true` for any value less than zero, and
`empty_value` is set to zero.

cfobel/python___scatter_gather