Switch to packaging model where each module goes into separate package.
Such model makes much more sense (after all it's also how big platforms
such as python do it). It allows better control over dependencies and
allows re-locating modules properly according to compatibility level
(i.e. now exit.sh can go to 'sh' despite the fact that in 'core' it had
to be with other Bash-compatible modules).
Old naming is inconsistent from how functions are named, which can be
pretty confusing.
Also, there's no such naming requirement for user's modules; the
recommended way is to use unique project-specific prefix for both
functions and globals.
Risk of conflict should be managed by naming modules uniquely and/or
being careful with deployment in new environments.