viewer: Use an AspectFrame widget in the external viewer, like the internal one

This increases consistency both in behavior (video will not appear letterboxed
when it's not supposed to) and code (making it easy to deal with size-allocate
events to automatically set resolution restriction caps, for example).