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 
Actually, now that I've consulted the Ruby Sass docs and code snippets, I'm not sure why you're checking if the `$map` argument might also be a list -- can't you just require it to be a map? Then you could just use
```
Map* m = ARG("$map", Map);
```
on the first line.