Metadata extractor plugin and some minor fixes

Lines like this are a red flag -- outside of assetstore related code, we should really try not to have assetstore implementation-aware behavior. We should talk about how to make this work across all assetstore types, and in a way that will scale. This may be a good time to start working on a distributed processing backend to handle data processing tasks in a general way. (It's a use case we will see over and over again and could be a huge selling point for girder if we do it correctly.)