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?

> list and map variable keyword arguments in same definition

I think this can be implemented as a separate feature. It's probably best suited to being shipped with `call`.

#### Spec

Specs for SassScript Maps have been added in https://github.com/sass/sass-spec/pull/44. Theses specs admittedly focus primarily on the map-* functions and not the parsing of Maps.

/cc @akhleung 
So the issue I ran into with 

```Map* m = ARG("$map", Map);``` 

is that this 

```foo: map-get((), foo);``` 

would resulting in 

```error: argument `$map` of `map-get($map, $key)` must be a map```

because `ARG` thinks `()` is a list. I suppose the correct thing to do would be to update `ARG` to understand that `()` is both an empty list and map.