Redundancy as a measure of fault-tolerance for the Internet of Things: A review