[Linter] Properly 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 unecessarily.

This change is based off of the changes by Samuel Giddins and is in a
separate commit to give credit