dispweight used arg 'group', but other vegan functions use 'groups'
remove empty levels from "groups" or dispweight fails cryptically

Error in if (any(means == 0)) { : missing value where TRUE/FALSE needed
major rewrite of dispweight: rethink, streamline & use vegan::nullmodel

The function was completely rewritten to use vegan::nullmodel
"c0_ind" which is equal to the simulation used in the original
function. The original function looped over species, but  now we
perform simulation for all species simultaneously using nullmodel,
and loop over levels of 'groups'. All code that could be moved
out of this loop was moved, and calculation of 'dhat' statistics
was refactored and streamlined -- and done outside the loop.

There are not many unchanged lines, but the results are equal provided
the 'p' values are on the same side of the fixed critical level.

In my laptop, this is also about 3x faster than the original.
default to 999 simulations in dispweight
adapt docs to 999 simulations of commit 67adb96
Expose nullmodel and plimit as user arguments in dispweight
dispweight handles 1-level 'groups': analysis wrt community mean
Relax data requirements in dispweight: reject only binary models

The test of data properties was moved to checking properties of
defined nullmodel, and only binary null models are rejected (these
would all have p=1). We now accept also non-integer quantitative
data. I don't know if these make sense, but that is none of my
business -- users decide.