Generic hooks implementation, in theory
BasicModelHook created a bit of a mess if plugins have side effects
that affect current database. Ugh.
BasicModel detect fully qualified table name - e.g., database_name.table_name
This could make queries more error-resistant. I'm not in a good
position to expand on this for a couple weeks though.
LEGACY: instructions update
BUGFIX: discounttype field on new batches
Properly named ID columns for custAvailablePrefs and custPreferences
tables. Both have very limited usage in code.
Internationalization rough draft. LC_MESSAGES strcture exists and
is used. Lots of work left to do getting strings in there.
Localization: added transalations for instances of Manufacturer,
Supplier, and Owner.
Implementation: FANNIE_CUSTOM_ERRORS setting for stack traces
BUGFIX: name normalization introduced an error
Weighted averages of item contribution to sales. I think this is
along the path to smarter margin calculations but I haven't yet
decided exactly how.
BUGFIX: correct misnamed var in BasicModel::loadHooks()
BUGFIX: make module inclusion from base dir conditional:
Identical records were appearing in ProductsModel::hooks, because of
recursion in FannieAPI::listModules(), and the line "$directories[] =
dirname(__FILE__)".  It seems this line wants to be inside a
conditional, based upon the $include_base parameter.  I added the
conditional, so a few calls to FannieAPI::listModules() might need to
have the argument explicity set to true.
Merge pull request #317 from AlbertaCoop/ng20140211

Two Bug Fixes via NG, 2014-02-11
Be less lazy about documenting methods
Backend signature capture implementation. Table to hold them,
script to display them on reprinted receipts
BUGFIX: incorrect variable name
LEGACY BUGFIX: incorrect column name
BUGFIX: Creating batch from advanced search results assigned incorrect
batch type.
BUGFIX: incorrect column name (special order system)