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 
Hmm ... I assume that this function is supposed to accept lists and treat them as maps that have integer keys? If you need to handle both cases, I can't think of a good way to do the type checking that wouldn't involve some boilerplate ... I suppose you could write variants of `ARG` and `get_arg` that can take 2 or 3 different types, and check that the argument matches one of them....

Also, even though you check for both Maps and Lists, you seem to cast only to a Map afterward -- is this an omission?