Principles of nanostructure design with protein building blocks