add libluaautoc as a dependency
lua : add the typing system

A dt-lua type is
* a full user data
* registered to luaautoc
* with index/newindex/pairs metamethods
* if it is a struct, registered members are automatically accessed/iterated
* callbacks are used to access/iterate other members
lua : introduce glist helpers

this allows function to easily push and pull a glist of lautoc-typed objects

the list is converted into a numerically-indexed table of converted objects

when converting back all objects are taken independently of their index
lua : add darktable.debug with some debugging function

currently this contains two fields

darktable.debug.debug : means we want extra debugging information

dartabke.debug.dump(object,[name]) : will return a string describing object. object can be anything, name is a name to help pretty printing

from now on, your test rc.lua should start with the following code

dt = require "darktable"
print(dt.debug.dump(dt,"dt")

this will print a dump of the complete environement.

you can set dt.debug.debug to true, but expect the result to be unreadable
lua : add the image type

each image has the following fields
* exif_exposure
* exif_aperture
* exit_iso
* exif_focal_length
* exif_focus_distance
* exif_crop
* exif_maker
* exif_model
* exif_datetime_taken
* filename (RO)
* width (RO)
* height (RO)
* longitude
* latitude
* rating
* creator
* publisher
* title
* description
* rights
* path (RO)
* duplicate_index (RO)
* is_ldr (RO)
* is_hdr (RO)
* is_raw (RO)
* id (RO)
* <colorlabel>

images can't be accessed in this commit.
lua : database handling

dt.database is a "magic table" with the following properties
* #database : number of images in the db
* database[i] : returns the image i
* database.duplicate(image) : returns a new image, duplicate of the param
* database.import(string) : if string is a file, import it. if it's a directory, import all images in the directory

* image:duplicate() is an alias for database.duplicate(image)
lua : add selection handling

 * darktable.gui.selection([table of images]) :
    if a table of images is provided, set the selection to that table
      returns the old selection
    if no table is provided, return the selection
lua : introduce module handling

modules are thing dynamically loaded at runtime, like iop, storages, format

export a table giving the current value for the module

* darktable.storage.<storage_name> : current configuration for the storage
* darktable.format.<format_name> : current configuration for the format
lua : introduce storage

* darktable.register_storage(short_name,name,store,finalizer)

register a new storage that can be selected by the user from the UI.
short name : unique name for the storage
name : name displayed in the UI
store : function(storage,image,format,img_number,img_total,high_quality)
   called once for each image
finalizer : function(storage)
   called after all images have been processed

note that the storage acts like a lua table : you can add your own fields to it
fix compilation when lua is not installed (not just disabled)
fix a missing NULL at the end of a vararg list
fix detection of reused metatables
lua : better handling of numbers in storage, allow to iterate over unknown fields

note that ipairs is not supported yet.
lua/storage :  add a second parameter to the finalizer callback

this second argument is a table
* key => the image processed
* value => the filename of the exported file

also make the callbacks optional
lua/storage : add an extra arg to callback to store extra data

the previous way of doing that was to allow any field in the storage data

that method was impractical because it mixed the lifecycle of the lua pointers with the lifecycle of C pointers

we now simply create a table that we pass allong as a new parameter to all store and finalize callbacks
Merge branch 'lua_review'