adds conditional modules (#6195)

conditional modules (described in julep #6195) are executed when a dependency module becomes
available and/or replaced. it has the following syntax:

```
module A requires B, C.D
  using B
  import C.D
  # do stuff with B, C.D
  # module A will be rerun whenever
  # B or C.D are (re)defined
end
```