In the current situation it is really easy to find something that doesn't work as expected.
I'm for fixing it and the PR is a tentative for the 3 mentioned problems.
@Niphlod, I agree, we should encourage to use web2py libraries ALWAYS starting from the gluon module, I think a first step in this direction is to do the same in web2py.
in gluon/* we have several times used both ways to import modules (even in tests/*). I started to review it in order to explicitly write from gluon/* import ... but this is an other things.
Being "explicitly" is slightly faster. Run python web2py.py -S welcome
>>> a="""
... from dal import DAL
... """
>>> b="""
... from gluon.dal import DAL
... """
>>> import timeit
>>> timeit.timeit(a, number=100000)
0.5820941925048828
>>> timeit.timeit(b, number=100000)
0.48334693908691406
Finally, "from dal import DAL" will force to re-import all modules at run-time.
and do "from dal import DAL" in a web2py console. The first time all modules will be reloaded, the second time no.
Paolo