Two-Dimensional Protein Crystals (S-Layers): Fundamentals and Application Potential