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 
Apologies, I'll clarify. The pattern with these function is they take a map, or an empty map `()` which is indistinguishable from a list, and is actually treated a list by the parser. 

So in essence I'm just trying to determine an `$map` is infact a map with zero or more keys.