Redesign the Sprite component

Should now be /mostly/ immutable save for filters.