text: Title: Binomial(...).sample has an infinite loop when combined with jax.vmap and p=0
  Body: This seems to be the same bug the cropped up in the [Poisson case](https://github.com/pyro-ppl/numpyro/issues/582). And is a result of [combining `lax.cond`, `vmap` and data-dependent inputs](https://github.com/google/jax/issues/2947):
  - one of the branches in `_binomial_dispatch` results in an infinite loop when p=0.
  - normally that branch is only taken when `n * p > 10`
  - but `vmap` causes jax to convert the conditional execution into a select operation.
  - so, when `dist.Binomial(...).sample` is wrapped in a `vmap`, both code paths execute and we get an infinite loop.
  
  The solution is to just wrap the branch in an additional condition check. I'll send in a PR doing this soon. 
  
  Here's a reproducing example:
  ```
  import jax
  import numpyro.distributions as dist
  
  def lets_break_this(p, key):
      # One of many ways of making n 
      n = (jax.random.uniform(key) > 0.5) * 3
      _, key = jax.random.split(key)
      return dist.Binomial(total_count=n, probs=p).sample(key)
  
  print('this works fine')
  jax.jit(lets_break_this)(0.1, jax.random.PRNGKey(0))
  jax.jit(jax.vmap(lets_break_this, in_axes=(None, 0)))(
      0.1, jax.random.split(jax.random.PRNGKey(0), 1)
  )
  
  print('this works fine too!')
  jax.jit(lets_break_this)(0, jax.random.PRNGKey(0))
  
  print('jit with vmap and p=0 results in hanging forever')
  jax.jit(jax.vmap(lets_break_this, in_axes=(None, 0)))(
      0, jax.random.split(jax.random.PRNGKey(0), 1)
  )
  ```