dispweights work without 'group' argument
all dispweights return transformed data (with attributes)
dispweight does simulations, not permutations
check that input are integers, fix docs
document that dispweight returns transformed data
dispweight doc says that it is 'nsimul' (not 'nperm')
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.
Introduce generalized (parametric) dispersion weighting

This is a new unpublished method. Original method uses Pearson
Chi-square for a Poisson model with one factor and assesses the
significance using multinomial simulation ("c0_ind" nullmodel).
The new method estimates the same Pearson Chi-square for any glm
model and evaluates the significance parametrically. Otherwise the
models are identical except that the original method ignores
completely the factor levels where species in assessing the number
of degrees of freedom, but the generalized method defines the
degrees of freedom in a standard way (number of observations minus
number of model coefficients). As the degrees of freedom is used as
divisor for weights, this will influence the strength of downweighting.
Update author information for dispweight + gdispweight

I think that email address of Eduard Szöcs also was out of date.
export gdispweight from the NAMESPACE
[g]dispweight returns attribute on degrees of freedom used ("df")

gdispweight finds d.f. directly from glm() and this is normally
constant for all species, but dispweight discards factor levels where
species does not occur, and degrees of freedom is non-constant for
species. The d.f. is used to divide the Pearson Chi-square to get
the overdispersion, and because d.f. is reduced for some species in
dispweight, these will get higher overdispersion and hence lower
weight in dispweight than in gdispweight. With this commit, the
same original Pearson Chi-square will be found for both dispweight
and gdispweight object:

attr(object, "D") * attr(object, "df")
dot expansion of terms works in gdispweight(comm ~ ., data=<data>)
dispweight returns the name of the nullmodel