Lint subspecs

Currently subspecs are not being linter for their "root" attributes. This includes name, and possibly other attributes. Since the linter will only lint attributes present in a spec anyway, it will not try to lint properties that don't exist.

This change makes it so all subspecs are linted for all specs. Additionally, the root spec name is moved into a separate function to ensure it is not called unnecessarily.

This change is based off of the changes by @segiddins  and is in a separate commit to give credit.

Closes #178 and #177