Configurable mapping

This is a PR for #27. Just look at the last commit as I based this on my other branch. I'll rebase this against master when those other changes are merged. :)

I went with the virtual method approach since the delegate syntax is so godawful. :stuck_out_tongue: