Implement SassScript Maps

This PR implements SassScript Maps and the API as of 3.3.14. There were changes to some map APIs in 3.4 none of which are implemented here.

I think this is about ready to start the feedback process. I'm not a c/c++ developer by trade so there's likely plenty of room for improvement.

#### TODO

- [x] map parsing
- [x] length
- [x] map-get
- [x] map-merge
- [x] map-remove (3.3 syntax)
- [x] map-keys
- [x] map-values
- [x] map-has-key
- [x] keywords

#### Known issues

- [ ] ~~`@debug` support~~ - https://github.com/sass/libsass/issues/223

#### Possible issues

- [ ] list and map variable keyword arguments in same definition (untested)
- [ ] have I sourcemaped correctly?

/cc @akhleung 
This error checking block is repeated a few times. Is there a better way?

```c
      Expression* m = ARG("$map", Expression);
      Expression* v = ARG("$key", Expression);
      if (!(m->concrete_type() == Expression::MAP || m->concrete_type() == Expression::LIST)) {
        error("$map: is not a map for `" + string(sig) + "`", path, position);
      }
      Map* map = dynamic_cast<Map*>(env["$map"]);
```