WIP: Merge diverging development

This is kind of a dual purpose pull request.

First: I would like to keep all development in 1 branch until we really need the code to drastically change based on AR versions. I was able to keep things compatible with 1 parse time AR version check.

Second: I have added AR versions to the build matrix to yell at us when we break compatibility. I am pretty sure the matrix is going to have a few incompatible combinations that I still need to sort out, but this is a start. Also currently, or prior to #46, 3.0 and 3.1 compatibility is/was broken. If we decide diverging development is where we need to go #46 will need to also be ported to 0-4-stable.

@sferik thoughts/comments?