First pass at defining plasticity models through user objects

Here i've just done the Mohr-Coulomb version.  You can see that:

(1) The UserObject defining Mohr-Coulomb is nice and small (good!)

(2) There can only be one internal parameter for each plasticity
model and yield functions, flow potentials and hardening potentials
for a given plasticity model can only depend on the internal param
for that model, and not any others (bad, but i don't know of any
plasticity models where this isn't the case, so maybe not too bad).

(3) TensorMechanicsPlasticModel accepts an arbitrary number of
plasticity models, but don't try >1 at the moment because i haven't
done the tricky business of determining active constraints, and
singular value decompositions

(4) The user interface is really quite similar to before, and
perhaps a little better due to restriction (2).

If there are no cries of indignation or better ideas, i'll now
go on to refactoring FiniteStrainTensile into this framework, and
then actually do some multi-surface computations (finally!).

Addresses issue #3832, but certainly doesn't fix the issue yet.