BUG/ENH: fix and improve constant detection

see #1794 and #1792

constant detection has now several layers of checks

- (1) hasconst
- (2) find column with ptp=0
       - find column with mean = 1
       - find column with mean !=0
- (3) find implicit constant

a column of zeros does not count as constant anymore, const in (2) needs ptp==0 and mean !=0

disable try ... except, and handle `exog is None` explicitly (that was the only case that went trough the exception part

if we don't detect a non-zeros constant, then we check for implicit in all cases

(There are lot's of cases because I want to minimize or short circuit the cost of const detection.)

still open:
- [ ] `hasconst` assumes implicit constant or no constant, cannot be used to specify `const_idx`
- [x] column of zeros prevents implicit constant check  DONE
- [ ] make it into standalone function and return (k_constant, const_idx) instead of attaching it directly.
- [ ] incomplete cleanup,  only cleanup left is to remove special code in RegressionModel

shouldn't this be `self.const_idx = idx` ?