Graphene-based nanocomposites for structural and functional applications: using 2-dimensional materials in a 3-dimensional world