task/ta22-22 -- Nparcel ftp.py module boilerplate

nparcel/ftp.py
* new module structure
Roll over versioning to 0.4
Merge branch 'dev' into feature/us22
task/ta22-23 -- integrate config

nparcel/conf/npftp.conf
* sample config file used for testing

nparcel/ftp.py
* new methods set_config_file(), _parse_config() to manage the
  configuration items
task/ta21b-01 -- factor out update and create from nparcel/dbsession.py
to nparcel/loader.py
nparcel/loaderdaemon.py

* fixed dumb error when trying to sort list from get_files() method
task/ta21b-02 -- integrate existing connote check

nparcel/loader.py
* update update() method so that it incorporates the existing connote
  check
Merge branch 'feature/us21b' into dev
Merge branch 'dev' into feature/us22
task/ta22-24 -- factor out BU_MAP to the config file

nparcel/conf/nparceld.conf
* new "file_bu" section to replace the BU_MAP global

nparcel/config.py
* update to support the new "file_bu" section

nparcel/loader.py
* replace BU_MAP global with configured "file_bu"

nparcel/loaderdaemon.py
* initialise a Loader() object with file_bu argument (taken from config)
task/ta22-25 -- exporter should not write file if no collected items are
detected

nparcel/bin/npexporterd
nparcel/bin/nploaderd
* pidfile now writes to the ~/.nparceld directory

nparcel/dbsession.py
* subtle formatting mod to the ISO time

nparcel/exporter.py
* extensive mods to bypass report write if no collected items are
  detected

nparcel/exporterdaemon.py
* update the _start() method to handle the new processing workflow of
  Exporter()
task/ta22-26 -- FTP identifies report file and generates list of
signature files
task/ta22-26 -- add functionality to FTP files
task/ta22-27 -- delete local file on successful transfer

nparcel/bin/npftp
* process() method accepts "dry" argument

nparcel/ftp.py
* method xfer_files() provides exception check around the login process
* method xfer_files() now supports delete on successful transfer
Roll over to version 0.5
task/ta-npi-016-01 -- log to different streams

nparcel/utils/log.py
* Some black magic to identify logger handlers based on the calling
  script

nparcel/utils/daemon.py
* daemoniser now closes all I/O streams except for the defined logging
  file handlers

nparcel/bin/npexporterd
nparcel/bin/npftp
nparcel/bin/nploaderd
* adjustments to support tailored logging streams
task/ta35-06 -- manufactured connote defect - check barcode sequence
[4:16] against connote

nparcel/utils/log.py
* logger looks for config in the ~/.nparceld directory
* nostests defaults to the root logger

nparcel/loader.py
* correction to the match_connote() method to extend check to barcode
  sequence [4:16] in connote