Self-Assembly of Proteins and Peptides and their Applications in Bionanotechnology