task/ta-npi-023-01 -- setup scaffolding for new module reminder.py

doc/source/modules/reminder.rst
nparcel/reminder.py
nparcel/tests/test_reminder.py
* new files
task/ta-npi-023-03 -- factor out config.py to new module in
preparation for new base class
task/ta-npi-023-02 -- integrate base config.py module

nparcel/config.py
nparcel/tests/test_config.py
* new files

nparcel/ftp.py
* uses new Config.py for config read
task/ta-npi-023-03 -- base b2cconfig.py from config.py

nparcel/b2cconfig.py
* class B2CConfig now inherits from Config()
task/ta-npi-023-05 -- prepare notification_delay and start_date config
items

nparcel/conf/npreminder.conf
* new config file for the reminder facility

nparcel/reminder.py
* new attributes notification_delay and start_date
* new method parse_config() which reads config items form the Reminder
  configuration file
task/ta-npi-023-06 -- refactor the b2cofnig.py __call__ facility to
property calls

nparcel/b2cconfig.py
* deprecated the __call__() method
* all attributes set as properties

nparcel/exporterdaemon.py
nparcel/loaderdaemon.py
* refactor config calls to use property-based versions
task/ta-npi-023-08 -- factor out db_kwargs from b2cconfig.py to base
config.py

nparcel/b2cconfig.py
* factored out the db_kwargs() method into config.py

nparcel/config.py
* new method db_kwargs() taken directly from parcel/b2cconfig.py

nparcel/reminder.py
* updated the __init__() method signature to include a new "db" argument
* __init__() method supports database sessions
task/ta-npi-023-07 - prepare the delayed parcel query

nparcel/table/jobitem.py
* new method uncollected_sql() SQL wrapper to extract the job_item
  records which remain uncollected after *uncollected_period* has
  elapsed
Merge branch 'task/ta-npi-023-07' into feature/us-npi-023
task/ta-npi-023-09 -- incorporate uncollected query into reminder
process flow

nparcel/reminder.py
* new method get_uncollected_items() which is a generator which returns
  the uncollected job_item.id's
* new method process() which is the high level process flow for the
  reminder process
task/ta-npi-023-10 -- factor out the proxy options from b2cconfig.py
into the base config.py

nparcel/b2cconfig.py
nparcel/config.py
* factored out methods proxy_strings() and proxy_kwargs() from
  b2cconfig.py to config.py
task/ta-npi-023-11 -- get template parameters

nparcel/conf/npreminder.conf
* new config item "hold_period"

nparcel/reminder.py
* support for new attribute "hold_period"
* new method get_agent_details() which returns agent details based
  on job_item.id

nparcel/table/jobitem.py
* new method job_item_agent_details_sql() that produces a
 SQL string to extract the agent details against a job_item.id
Patched bug in the POSTCODE_MAP structure.
Merge branch 'master' of https://github.com/loum/nparcel into feature/us-npi-023
Another POSTCODE_MAP patch.
Merge branch 'master' of https://github.com/loum/nparcel into feature/us-npi-023
task/ta-npi-023-12 -- send email

nparcel/loader.py
* replace barcode with connote

nparcel/reminder.py
* __init__() now includes attributes proxy, scheme and email_api
* new method send_email()

nparcel/restemailer.py
* create_comms() method signature now features a "template" argument
  which provides support for targeted email templates

nparcel/templates/email_body_html.t
nparcel/templates/email_err_body_html.t
* replace barcode reference with connote
task/ta-npi-023-13 -- merge config items back into b2cconfig.py

nparcel/b2cconfig.py
nparcel/conf/nparceld.conf
* add notification_delay, start_date and hold_period support

nparcel/reminder.py
* updated the __init__() method signature: removed the config_file
  argument.  Added notification_delay, start_date and hold_period
* deprecated the parse_config() method as it's now handled in
  b2cconfig.py
task/ta-npi-023-14 -- send SMS

nparcel/reminder.py
* __init__() method signature now accepts sms_api argument
* new method send_sms()

nparcel/restsmser.py
* updated create_comms() signature to accept "template" argument
task/ta-npi-023-15 -- formatted return date

nparcel/reminder.py
* new method get_return_date() which creates the return date in a nicely
  formatted output