rewrite scanning code

 * scan acoustid fingerprint in addition to loudness and save to db
 * expose scanning state to web client UI. closes #124
 * use DedupedQueue for scans. closes #271
when playlist changes, reprioritize scanning queue