add translitcodec to contrib
use translitcodec for urlify
remove unnecessary imports
convert session to dict before pickling

Session was constantly being pickled without converting to dict as it
should be.
Step 1 in fixing 1859: this stops the crashing, but virtual fields are not exported
step 2 of fixing export from grids when there are virtual fields. Note export hidden columns includes all table fields and any virtual fields which are displayed, but it does not pick up virtual fields which are not displayed.
when exporting hidden columns, pick up all virtual fields, even those not on display.
fixed comment
Minor usability improvement to grid search widget
changed the button "New" to "Add" and added a title attribute (view on hover) explaining what this button does
Merge pull request #371 from timrichardson/issues/1859

Issues/1859 export from grid fails when virtual fields are present
Merge pull request #372 from timrichardson/search_widget_button_label_change

Minor usability improvement to grid search widget
Better button labels for grid search widget
This is a second attempt at search widget buttons.
The create "+Add" is now "+Add Record".
The first search button becomes "New Search", and the And and Or buttons become "+ And" and "+ Or" (to hint that they add terms to the search). There are tool tips on all these buttons now
Merge pull request #373 from timrichardson/grid_search_widget_labels

Better button labels for grid search widget
greater flexibility for row customization by using css
dal.py: BaseAdapter: insert: solved problem when creating new record without passing the primary key as argument
fixed IS_TIME()('12:00 am')
dal.py: BaseAdapter: insert: solved problem when creating new record without passing the primary key as argument
Update dal.py Table:validate_and_update

Validation has been fixed on validate_and_update method
1866: small functionality change, better explanation.
Better 'tooltip' documention for different export formats.
Don't refer to Excel, say spreadsheet instead.
Only functionality change is standard CSV uses the rows.export_to_csv(..., represent=True) to make the output look like the on-screen grid representation.
The other formats are not changed, so both TSV and TSV with hidden columns do represent, and CSV with hidden columns does not (for speed)
rows.export_to_csv_file assumes the function field.represent takes only one argument, which was causing a ticket with virtua fields