Change unchecked element access to square brackets (operator[])

Rationale:
* Square brackets are familiar from C arrays and std::vector.
* Parens with integers looks too much like the constructor.

Also I combined all the overloads into single methods with default arguments to reduce the amount of similar looking code.