Add in memory tag and metastore index

## Overview

This PR adds an in memory metastore and tag index. It should be treated like a write through cache for the metastore. Whenever the metastore gets updated the index should. The index is loaded completely into memory on server load.

It will provide quick lookups for measurements, series, and filtering those based on tags and regexes.

For all the `LIST MEASUREMENTS`, `LIST SERIES`, `LIST TAG KEYS`, and `LIST TAG VALUES` queries, this index should provide everything needed to answer them. Unless they have a time filter, in which case we'll have to do some other stuff later.

The query processor should be able to use this to walk the AST of the where clause to get a set of series IDs that need to be queried. It can then use those to create MR jobs to get everything done.
This seems counter-intuitive. If I pass in an empty slice of names, the code works all names? Seems like the code should return an empty slice in that case. After all an empty slice says I didn't give you any measurements, so how could I get any tags? Or am I missing something?