On the other hand, since you come from a math background, I suppose you know the concept of "free vector space" (which is usually introduced along with the universal mapping property of tensor product). As said in a previous comment, technically every object can be viewed as a vector, and hence a tensor. A duck is a tensor, a bird that quacks like a duck is a tensor, a Java SimpleBeanFactoryAwareAspectInstanceFactory is a tensor, a Neo Armstrong Cyclone Jet Armstrong Cannon is a tensor, a red-black tree is a tensor. But we don't call them tensors, because normally we don't do anything tensorial to them.
Then why shall we treat multidimensional arrays differently? Apart from the mere fact that a tensor in physics/mathematics can be stored numerically as a multidimensional array, my impression is that (please correct me if I'm wrong) the coinage of the term in machine learning libraries is a complete disregard for the original physical or mathematical concept. Is "multidimensional array" a name so hard to understand that we need a new name? Does the new name in any way enhance one's understanding of machine learning that the old name cannot? I wonder.
It's true that you can take the "free vector space" on any set under the sun, but I disagree with the statement "every object can be viewed as a vector." Rather, you can construct a vector space and associate to each object an element of that vector space, but the object itself is not a vector.
As opposed to an array of floats, which really itself looks like and is fruitful to think about as a vector.
Edit: Oh, also regarding the heterogeneous type stuff. I think most would agree that calling a bag of ints, floats, bools, and strings a "tensor" would not make much sense.
I think "tensor" is the abstract idea, where "multi-dimensional array" is the implementation.