Multi label support

This is an attempt to clean up and improve upon @sguada work in #523. It is a work in progress.