Added modular DAL, updated gluon imports to new structure
Re-implemented copyreg picklers/unpicklers for DAL and Reference classes (due to errors on sessions)
Fixed gluon.tests.dal_nosql with new imports
Updated DatabaseStoredFile to latest web2py master
ASSIGNJS
possible fix to rss
new structure in revised README
added test for storage pickling
refactored pickle everywhere but Session, removed unused imports
Merge pull request #491 from niphlod/fix/readme

new structure in revised README
Merge pull request #492 from niphlod/tests/storage_pickling

added test for storage pickling
Merge pull request #493 from niphlod/fix/refactoring_pickle

refactored pickle everywhere but Session, removed unused imports
fixed pickling of session
fixed is_crypt in tools, thanks Anthony
refactored pickling of sessions
Merge pull request #494 from niphlod/fix/pickle_refactoring

refactored pickling of sessions
case insensitive autocomplete again
fix infinite loop in request_password
Merge pull request #496 from rpedroso/reset_password_infinite_loop

fix infinite loop in request_password
Fixed #1810: DAL.select(left=...) causes "Unknown column 't1.i1' in 'on clause'"

According to the MySQL 5.5 manual [1], comma-separated table references in joins
should be wrapped in parenthesis or JOIN should be used instead of comma.

Further explanation from the manual: The ON clause takes precedence since
a couple of versions so the operands for the ON clause change:

SELECT * FROM t1, t2 JOIN t3 ON (t1.i1 = t3.i3);

The operands for the ON are t2 and t3. t1.i1 is not known at this point.

[1] https://dev.mysql.com/doc/refman/5.5/en/join.html